a zmienną zlecenie wstawiłem na samym początku z myslą, ze pomoze to w ustalaniu czy sa otwarte jakies pozycje i jakie


kombinowac trzeba, bo inaczej sie nizcego nei nauczymy

Dodano po 8 minutach:
To był chyba milowy krok dla mnie

Dodano po 3 godzinach 21 minutach:
Wymyśliłem sobie coś takiego:
Na sygnał EMA zajmuję przeciwne pozycje, każda ze stoplosem - obecnie ustawiony na 15.
W zamyśle miałoby to działac tak, że zajmuje dwie pozycje, aby sie zabezpieczyć przed fałszywym sygnałem. Stoploss zamyka jedną pozycję, a druga zarabia dalej az do sygnału sprzedaży (lub stoploss).
Nie chodzi o strategię, tylko o kod, a problem jest taki, że nie zawsze otwiera pozycje. W dzienniku wywala jakieś błędy i nei wiem dlaczego

Kod: Zaznacz cały
int start()
{
//----
//zdefiniowanie zmiennych dla łatwiejszej dalszej pracy
double MACurrent;
double MAPrevious;
double MACD1;
double MACD2;
double SL = 15;
MACurrent = iMA(Symbol(),0,20,3,MODE_EMA,0,0);
MAPrevious = iMA(Symbol(),0,20,3,MODE_EMA,0,1);
MACD1 = iMACD(Symbol(),0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
MACD2 = iMACD(Symbol(),0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
if (Hour()<7)// && Hour()>1)
{
if (Volume[0]>1) return;
if (OrdersTotal()==0) //sprawdzanie, czy są otwarte pozycje, aby nie dublować
{
if (Open[1] < MAPrevious && Open[0] > MAPrevious ) // sprawdzanie czy porpzednie otwarcie jest poniżej poziomu EMA a obecne powyżej
{
OrderSend(Symbol(), OP_BUY, 1, Ask, 5, Ask-SL*Point,0,NULL,0,0,Red);
OrderSend(Symbol(), OP_SELL, 1, Bid, 5, Bid+SL*Point,0,NULL,0,0,Red);
}
else
{
if (Open[1] > MAPrevious && Open[0] < MAPrevious) // sprawdzanie czy porpzednie otwarcie jest powużej poziomu EMA a obecne poniżej
{
OrderSend(Symbol(), OP_SELL, 1, Bid, 5, Bid+SL*Point,0,NULL,0,0,Red);
OrderSend(Symbol(), OP_BUY, 1, Ask, 5, Ask-SL*Point,0,NULL,0,0,Red);
}
}
}
}
else
{
if (Hour()>15)// && Hour()<21)
{
if (Volume[0]>1) return;
if (OrdersTotal()==0) //sprawdzanie, czy są otwarte pozycje, aby nie dublować
{
if (Open[1] < MAPrevious && Open[0] > MAPrevious ) // sprawdzanie czy porpzednie otwarcie jest poniżej poziomu EMA a obecne powyżej
{
OrderSend(Symbol(), OP_BUY, 1, Ask, 5, Ask-SL*Point,0,NULL,0,0,Red);
OrderSend(Symbol(), OP_SELL, 1, Bid, 5, Bid+SL*Point,0,NULL,0,0,Red);
}
else
{
if (Open[1] > MAPrevious && Open[0] < MAPrevious) // sprawdzanie czy porpzednie otwarcie jest powużej poziomu EMA a obecne poniżej
{
OrderSend(Symbol(), OP_SELL, 1, Bid, 3, Bid+SL*Point,0,NULL,0,0,Red);
OrderSend(Symbol(), OP_BUY, 1, Ask, 3, Ask-SL*Point,0,NULL,0,0,Red);
}
}
}
}
}
if (OrdersTotal()==1)
{
OrderSelect(0,SELECT_BY_POS);
if (OrderType()==OP_BUY)
{
if (Open[1] > MAPrevious && Point < MAPrevious)
OrderClose(OrderTicket(), 1, Bid, 3, Blue);
}
else
if (OrderType()==OP_SELL)
{
if (Open[1] < MAPrevious && Point > MAPrevious)
OrderClose(OrderTicket(), 1, Ask, 3, Blue);
}
}
//----
}