Czy ktoś może kiedyś widział albo posiada skrypt który działałby jako SL - a konkretnie zamykałby pozycje jeżeli świeca na określonym interwale zamknęłaby się powyżej/poniżej określonej ceny.
Na D1 można jeszcze sprawdzać jak się zamknął dzień - ale sprawdzanie poniżej staje się już z lekka upierdliwe.
Szukam już od dłuższego czasu czegoś takiego i nic konkretnego nie znalazłem.
Zamknięcie pozycji w/g zamknięcia świecy
-
- Gaduła
- Posty: 122
- Rejestracja: 05 sty 2011, 13:49
Re: Zamknięcie pozycji w/g zamknięcia świecy
Zrobiłem na szybko generatorem, przetestuj czy działa jak nie będzie działać to pisz - poprawię
#include <stdlib.mqh>
#include <WinUser32.mqh>
// exported variables
extern double cena_powyzej = 0;
extern double cena_ponizej = 0;
// local variables
double PipValue=1; // this variable is here to support 5-digit brokers
bool Terminated = false;
string LF = "\n"; // use this in custom or utility blocks where you need line feeds
int NDigits = 4; // used mostly for NormalizeDouble in Flex type blocks
int ObjCount = 0; // count of all objects created on the chart, allows creation of objects with unique names
int current = 0;
datetime BarTime1 = 0;
int init()
{
NDigits = Digits;
if (false) ObjectsDeleteAll(); // clear the chart
Comment(""); // clear the chart
}
// Expert start
int start()
{
if (Bars < 10)
{
Comment("Not enough bars");
return (0);
}
if (Terminated == true)
{
Comment("EA Terminated.");
return (0);
}
OnEveryNewBar1();
}
void OnEveryNewBar1()
{
if (true == false && false) PipValue = 10;
if (true && (NDigits == 3 || NDigits == 5)) PipValue = 10;
if (BarTime1 < Time[0])
{
// we have a new bar opened
BarTime1 = Time[0]; // keep the new bar open time
TechnicalAnalysis3();
TechnicalAnalysis8();
}
}
void TechnicalAnalysis3()
{
if (Close[current] > cena_powyzej)
{
CloseAll2();
}
}
void CloseAll2()
{
int orderstotal = OrdersTotal();
int orders = 0;
int ordticket[30][2];
for (int i = 0; i < orderstotal; i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderType() != OP_SELL || OrderSymbol() != Symbol())
{
continue;
}
ordticket[orders][0] = OrderOpenTime();
ordticket[orders][1] = OrderTicket();
orders++;
}
if (orders > 1)
{
ArrayResize(ordticket,orders);
ArraySort(ordticket);
}
for (i = 0; i < orders; i++)
{
if (OrderSelect(ordticket[1], SELECT_BY_TICKET) == true)
{
bool ret = OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 4, Red);
if (ret == false)
Print("OrderClose() error - ", ErrorDescription(GetLastError()));
}
}
CloseAll6();
}
void CloseAll6()
{
int orderstotal = OrdersTotal();
int orders = 0;
int ordticket[30][2];
for (int i = 0; i < orderstotal; i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderType() != OP_BUY || OrderSymbol() != Symbol())
{
continue;
}
ordticket[orders][0] = OrderOpenTime();
ordticket[orders][1] = OrderTicket();
orders++;
}
if (orders > 1)
{
ArrayResize(ordticket,orders);
ArraySort(ordticket);
}
for (i = 0; i < orders; i++)
{
if (OrderSelect(ordticket[1], SELECT_BY_TICKET) == true)
{
bool ret = OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 4, Red);
if (ret == false)
Print("OrderClose() error - ", ErrorDescription(GetLastError()));
}
}
}
void TechnicalAnalysis8()
{
if (Close[current] < cena_ponizej)
{
CloseAll2();
}
}
int deinit()
{
if (false) ObjectsDeleteAll();
}
#include <stdlib.mqh>
#include <WinUser32.mqh>
// exported variables
extern double cena_powyzej = 0;
extern double cena_ponizej = 0;
// local variables
double PipValue=1; // this variable is here to support 5-digit brokers
bool Terminated = false;
string LF = "\n"; // use this in custom or utility blocks where you need line feeds
int NDigits = 4; // used mostly for NormalizeDouble in Flex type blocks
int ObjCount = 0; // count of all objects created on the chart, allows creation of objects with unique names
int current = 0;
datetime BarTime1 = 0;
int init()
{
NDigits = Digits;
if (false) ObjectsDeleteAll(); // clear the chart
Comment(""); // clear the chart
}
// Expert start
int start()
{
if (Bars < 10)
{
Comment("Not enough bars");
return (0);
}
if (Terminated == true)
{
Comment("EA Terminated.");
return (0);
}
OnEveryNewBar1();
}
void OnEveryNewBar1()
{
if (true == false && false) PipValue = 10;
if (true && (NDigits == 3 || NDigits == 5)) PipValue = 10;
if (BarTime1 < Time[0])
{
// we have a new bar opened
BarTime1 = Time[0]; // keep the new bar open time
TechnicalAnalysis3();
TechnicalAnalysis8();
}
}
void TechnicalAnalysis3()
{
if (Close[current] > cena_powyzej)
{
CloseAll2();
}
}
void CloseAll2()
{
int orderstotal = OrdersTotal();
int orders = 0;
int ordticket[30][2];
for (int i = 0; i < orderstotal; i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderType() != OP_SELL || OrderSymbol() != Symbol())
{
continue;
}
ordticket[orders][0] = OrderOpenTime();
ordticket[orders][1] = OrderTicket();
orders++;
}
if (orders > 1)
{
ArrayResize(ordticket,orders);
ArraySort(ordticket);
}
for (i = 0; i < orders; i++)
{
if (OrderSelect(ordticket[1], SELECT_BY_TICKET) == true)
{
bool ret = OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 4, Red);
if (ret == false)
Print("OrderClose() error - ", ErrorDescription(GetLastError()));
}
}
CloseAll6();
}
void CloseAll6()
{
int orderstotal = OrdersTotal();
int orders = 0;
int ordticket[30][2];
for (int i = 0; i < orderstotal; i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderType() != OP_BUY || OrderSymbol() != Symbol())
{
continue;
}
ordticket[orders][0] = OrderOpenTime();
ordticket[orders][1] = OrderTicket();
orders++;
}
if (orders > 1)
{
ArrayResize(ordticket,orders);
ArraySort(ordticket);
}
for (i = 0; i < orders; i++)
{
if (OrderSelect(ordticket[1], SELECT_BY_TICKET) == true)
{
bool ret = OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 4, Red);
if (ret == false)
Print("OrderClose() error - ", ErrorDescription(GetLastError()));
}
}
}
void TechnicalAnalysis8()
{
if (Close[current] < cena_ponizej)
{
CloseAll2();
}
}
int deinit()
{
if (false) ObjectsDeleteAll();
}
Re: Zamknięcie pozycji w/g zamknięcia świecy
testuje
Da sie tym obsługiwać kilka pozycji niezależnie- w sensie na kilku instrumentach, czy trzeba jakiś magic number wprowadzić żeby sie nie gryzło?
Zamknięcie świecy z jakiego interwału jest decydujące dla zamknięcia pozycji? Ten na którym uruchomiłem EA czy jakiś trzeba zdeklarować?
Jak to będzie działać - to po prostu powinieneś to sprzedawać - ja chyba przez rok nie znalazłem nic co by działało
Da sie tym obsługiwać kilka pozycji niezależnie- w sensie na kilku instrumentach, czy trzeba jakiś magic number wprowadzić żeby sie nie gryzło?
Zamknięcie świecy z jakiego interwału jest decydujące dla zamknięcia pozycji? Ten na którym uruchomiłem EA czy jakiś trzeba zdeklarować?
Jak to będzie działać - to po prostu powinieneś to sprzedawać - ja chyba przez rok nie znalazłem nic co by działało
-
- Gaduła
- Posty: 122
- Rejestracja: 05 sty 2011, 13:49
Re: Zamknięcie pozycji w/g zamknięcia świecy
Jest ustawione na taki interwał jaki jest aktualnie włączony na wykresie i powinno zamykać wszystkie pozycje na jakich włączone jest EA czyli jeśli jest włączone na eurusd to te zamyka i żadne inne. Aby zamykało konkretną pozycję to trzeba trochę zmodyfikować kod. "Cena powyżej" to cena powyżej której zamknięcie świecy powoduje zamknięcie pozycji, analogicznie "cena poniżej". Obie muszą być wpisane aby działało poprawnie (można wpisać jakąś odległą) i trzeba pamiętać aby cena powyżej nigdy nie była mniejsza od poniżej bo wtedy skrypt zacznie wariować.
Re: Zamknięcie pozycji w/g zamknięcia świecy
Zamykać konkretnej nie musi - może zamykać wszystkie z danego intrumentu.
A nie będzie problemu między instrumentami? Można uruchomić na kilku wykresach i na każdym EA będzie działało niezależnie?
Bo jak rozumiem nie można jednocześnie działać na EURUSD na D1 i H4 na przykład na różnych wykresach , bo wtedy będzie problem, ale na różnych instrumentach będzie śmigać bez problemu na takim interwale na jakim otworzony jest wykres?
Ale
się należy
A nie będzie problemu między instrumentami? Można uruchomić na kilku wykresach i na każdym EA będzie działało niezależnie?
Bo jak rozumiem nie można jednocześnie działać na EURUSD na D1 i H4 na przykład na różnych wykresach , bo wtedy będzie problem, ale na różnych instrumentach będzie śmigać bez problemu na takim interwale na jakim otworzony jest wykres?
Ale

-
- Gaduła
- Posty: 122
- Rejestracja: 05 sty 2011, 13:49
Re: Zamknięcie pozycji w/g zamknięcia świecy
Można uruchomić na kilku wykresach i będzie niezależne. Jeśli chcesz mieć h4 i d1 równocześnie na tej samej parze to można otworzyć dwa wykresy i uruchomić 2x EA nie będzie to ze sobą kolidowało. Potestuj na demie na małych interwałach np. m1. m5 żeby było szybciej. Jak będzie dobrze działać na małych to i na dużych się sprawdzi.
Re: Zamknięcie pozycji w/g zamknięcia świecy
Już mi wszystko gra jak gruźlikowi w piersiach
Podawałem jedną cenę tylko i wycinało zlecenie - trzeba podać obydwie - i działa idealnie. A jak można obsługiwać różne interwały po prostu na dodatkowych wykresach - to po prostu miodzio.
Chodzi jak w zegarku
Stary - nie wiesz jak mi życie ułatwiłeś
Podeślij adres to zaopatrze cię w prawdziwe
Podawałem jedną cenę tylko i wycinało zlecenie - trzeba podać obydwie - i działa idealnie. A jak można obsługiwać różne interwały po prostu na dodatkowych wykresach - to po prostu miodzio.
Chodzi jak w zegarku
Stary - nie wiesz jak mi życie ułatwiłeś
Podeślij adres to zaopatrze cię w prawdziwe
