Please help - otwieranie pojedyńczego zlecenia do TP lub SL
Please help - otwieranie pojedyńczego zlecenia do TP lub SL
Witam,
Niedawno zacząłem uczyć się programowania robotów. Mam problem z napisaniem funkcji dla robota nad którym pracuję. Chce aby robot kupował powiedzmy 1 lota w momencie gdy cena przebije najwyższą wartość z ostatnich 20 świeczek o 2 pipsy - coś ala Donchian channel. W momencie gdy przedostatnia świeczka jest nowym maximum nie ma nowej transakcji, a wyjście ustala TP lub SL. Wydaje mi się że większość kodu mam ok. ale problem w tym że robot otwiera wiele transakcji jednocześnie. Chciałbym żeby otworzył pojedyńczą transakcję przy wyznaczonych warunkach po czym poczekał aż zrealizuje się TP lub SL i dopiero przy nastepnych sprzyjajacych okolicznościach otworzył kolejną. Zawsze tylko jedna transakcja ma być otwarta. Lub może funkcja typy : można otworzyć tylko jedną transakcję na pojedyńczej świeczce. Z góry dziękuję za pomoc
// Buy order
if(Ask > HighestShift && High[1] <= High[0] && BuyTicket == 0)
{
OrderSelect(SellTicket,SELECT_BY_TICKET);
double OpenPrice = High[HighestShift] + (2 * UsePoint);
// Calculate stop loss and take profit
if(StopLoss > 0) double BuyStopLoss = OpenPrice - (StopLoss * UsePoint);
if(TakeProfit > 0) double BuyTakeProfit = OpenPrice + (TakeProfit * UsePoint);
// Open buy order
BuyTicket = OrderSend(Symbol(),OP_BUY,LotSize,OpenPrice,UseSlippage,
BuyStopLoss,BuyTakeProfit,"Buy Order",MagicNumber,0,Green);
SellTicket = 0;
}
Niedawno zacząłem uczyć się programowania robotów. Mam problem z napisaniem funkcji dla robota nad którym pracuję. Chce aby robot kupował powiedzmy 1 lota w momencie gdy cena przebije najwyższą wartość z ostatnich 20 świeczek o 2 pipsy - coś ala Donchian channel. W momencie gdy przedostatnia świeczka jest nowym maximum nie ma nowej transakcji, a wyjście ustala TP lub SL. Wydaje mi się że większość kodu mam ok. ale problem w tym że robot otwiera wiele transakcji jednocześnie. Chciałbym żeby otworzył pojedyńczą transakcję przy wyznaczonych warunkach po czym poczekał aż zrealizuje się TP lub SL i dopiero przy nastepnych sprzyjajacych okolicznościach otworzył kolejną. Zawsze tylko jedna transakcja ma być otwarta. Lub może funkcja typy : można otworzyć tylko jedną transakcję na pojedyńczej świeczce. Z góry dziękuję za pomoc
// Buy order
if(Ask > HighestShift && High[1] <= High[0] && BuyTicket == 0)
{
OrderSelect(SellTicket,SELECT_BY_TICKET);
double OpenPrice = High[HighestShift] + (2 * UsePoint);
// Calculate stop loss and take profit
if(StopLoss > 0) double BuyStopLoss = OpenPrice - (StopLoss * UsePoint);
if(TakeProfit > 0) double BuyTakeProfit = OpenPrice + (TakeProfit * UsePoint);
// Open buy order
BuyTicket = OrderSend(Symbol(),OP_BUY,LotSize,OpenPrice,UseSlippage,
BuyStopLoss,BuyTakeProfit,"Buy Order",MagicNumber,0,Green);
SellTicket = 0;
}
Kod: Zaznacz cały
if(OrdersTotal()==0){
//otwieranie pozycji
}
eddek To nie jest dobre rozwiązanie - chyba że tylko to jedno EA gra na koncie.
Wystarczy przejechać po wszystkich aktywnych zleceniach i zliczyć te które mają MAGIC danego EA. Jeśli jest 0 to trade.
Wystarczy przejechać po wszystkich aktywnych zleceniach i zliczyć te które mają MAGIC danego EA. Jeśli jest 0 to trade.
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..
Dzięki za pomoc, póki co tylko 1 EA będzie grał na koncie więc dodam kawałek kodu od eddka, ale Tig3r jeśli możesz napisać mi funkcję która sprawdza wszystkie aktywne zlecenia poprzez MagicNumber byłbym wdzięczny.
Dodano po 51 minutach:
Wprowadziłem zmiany o których mowił eddek, ale wygląda na to że z jakiegoś powodu EA otwiera tylko buy order, ani jednego sell short !? załączam kod do wglądu:
if(OrdersTotal() == 0)
{
// Buy order
if(Ask > HighestShift && High[1] <= High[0] && BuyTicket == 0)
{
// OrderSelect(SellTicket,SELECT_BY_TICKET);
double OpenPrice = High[HighestShift] + (2 * UsePoint);
// Calculate stop loss and take profit
if(StopLoss > 0) double BuyStopLoss = OpenPrice - (StopLoss * UsePoint);
if(TakeProfit > 0) double BuyTakeProfit = OpenPrice + (TakeProfit * UsePoint);
// Open buy order
BuyTicket = OrderSend(Symbol(),OP_BUY,LotSize,OpenPrice,UseSlippage,
BuyStopLoss,BuyTakeProfit,"Buy Order",MagicNumber,0,Green);
SellTicket = 0;
}
}
if(OrdersTotal() == 0)
{
// Sell order
if(Bid < LowestShift && Low[1] >= Low[0] && SellTicket == 0)
{
// OrderSelect(BuyTicket,SELECT_BY_TICKET);
OpenPrice = Low[LowestShift] - (2 * UsePoint);
if(StopLoss > 0) double SellStopLoss = OpenPrice + (StopLoss * UsePoint);
if(TakeProfit > 0) double SellTakeProfit = OpenPrice - (TakeProfit * UsePoint);
SellTicket = OrderSend(Symbol(),OP_SELL,LotSize,OpenPrice,UseSlippage,
SellStopLoss,SellTakeProfit,"Sell Order",MagicNumber,0,Red);
BuyTicket = 0;
}
}
return(0);
}

Dodano po 51 minutach:
Wprowadziłem zmiany o których mowił eddek, ale wygląda na to że z jakiegoś powodu EA otwiera tylko buy order, ani jednego sell short !? załączam kod do wglądu:
if(OrdersTotal() == 0)
{
// Buy order
if(Ask > HighestShift && High[1] <= High[0] && BuyTicket == 0)
{
// OrderSelect(SellTicket,SELECT_BY_TICKET);
double OpenPrice = High[HighestShift] + (2 * UsePoint);
// Calculate stop loss and take profit
if(StopLoss > 0) double BuyStopLoss = OpenPrice - (StopLoss * UsePoint);
if(TakeProfit > 0) double BuyTakeProfit = OpenPrice + (TakeProfit * UsePoint);
// Open buy order
BuyTicket = OrderSend(Symbol(),OP_BUY,LotSize,OpenPrice,UseSlippage,
BuyStopLoss,BuyTakeProfit,"Buy Order",MagicNumber,0,Green);
SellTicket = 0;
}
}
if(OrdersTotal() == 0)
{
// Sell order
if(Bid < LowestShift && Low[1] >= Low[0] && SellTicket == 0)
{
// OrderSelect(BuyTicket,SELECT_BY_TICKET);
OpenPrice = Low[LowestShift] - (2 * UsePoint);
if(StopLoss > 0) double SellStopLoss = OpenPrice + (StopLoss * UsePoint);
if(TakeProfit > 0) double SellTakeProfit = OpenPrice - (TakeProfit * UsePoint);
SellTicket = OrderSend(Symbol(),OP_SELL,LotSize,OpenPrice,UseSlippage,
SellStopLoss,SellTakeProfit,"Sell Order",MagicNumber,0,Red);
BuyTicket = 0;
}
}
return(0);
}
Mógłbym ale tego nie zrobię. Wszystkie klocki potrzebne masz, mogę służyć radą i dać wędkę ale nie rybę.nunxt pisze:Tig3r jeśli możesz napisać mi funkcję która sprawdza wszystkie aktywne zlecenia poprzez MagicNumber byłbym wdzięczny. Very Happy
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..
mam taki kawałek kodu ktory ma pozwalac na tylko jedna transakcje na danej swieczce, problem w tym ze nie wiem w ktorym momencie mojego EA powinienem go wstawic. czy moze mi ktos pomoc?
datetime Time0 = 0;
void start()
{
if (Time0 != Time[0])
{
BuyTicket = OrderSend(Symbol(),OP_BUY,LotSize,OpenPrice1,UseSlippage,
BuyStopLoss,BuyTakeProfit,"Buy Order",Magi......
Time[0] = Time[0];
}
}
datetime Time0 = 0;
void start()
{
if (Time0 != Time[0])
{
BuyTicket = OrderSend(Symbol(),OP_BUY,LotSize,OpenPrice1,UseSlippage,
BuyStopLoss,BuyTakeProfit,"Buy Order",Magi......
Time[0] = Time[0];
}
}