Помогите найти ошибку в коде!!!

 

Сразу предупреждаю Я не программист! Будем считать что это жалкие потуги понять что представляет из себя MQL!

Если вас не затруднит посмотрите где я ошибся!

Почему-то после данного алгоритма меня возвращает на start!



else
{
Print("плохой профит");
OrderSelect(OrdersTotal(),SELECT_BY_POS,MODE_TRADES);
openprice=OrderOpenPrice();
if (OrderSymbol()==Symbol() && OrderMagicNumber () == Magicbuy)
{
Print("открываем покупку ",OrderMagicNumber ());
ticketsell = OrderSend(Symbol(),OP_BUY,lotsbuy*mult,openprice-step,3,0,0,"Grail",Magicsell,0,Red);
}
if ((OrderSymbol()==Symbol()) && (OrderMagicNumber () == Magicsell))
{
Print("открываем продажу ",OrderMagicNumber ());
ticketbuy = OrderSend(Symbol(),OP_BUY,lotsbuy*mult,openprice,3,0,0,"Grail",Magicbuy,0,Blue);
}
}

free = AccountFreeMargin();balance = AccountBalance();
for (cnt=0;cnt< OrdersTotal();cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderSymbol()==Symbol() && OrderMagicNumber () == Magicbuy) ticketbuy = OrderTicket();
if (OrderSymbol()==Symbol() && OrderMagicNumber () == Magicsell) ticketsell = OrderTicket();
}
if (OrdersTotalMagicbuy(Magicbuy)==0)
{
profitbuy=0;ticketbuy=0;tpb=0;
}
if (OrdersTotalMagicsell(Magicsell)==0)
{
profitsell=0;ticketsell=0;tps=0;
}

return(0);
}




Хотя должен открыть продажу!

 

вот тут:

OrderSelect(OrdersTotal(),SELECT_BY_POS,MODE_TRADES);

Я так понял тебе нужно выбрать последний ордер, надо так:

OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES);

Так как счет начинается с 0, а не с 1, поэтому и OrdersTotal() на 1 меньше надо брать.

А вообще по-хорошему последний ордер надо через цикл определять. То есть в цикле ты проходишь по всему списку ордеров и ищешь ордер наибольшим значением времения открытия(поиск максимального значения).

Что-то вроде этого:


datetime open_time=0;

for (cnt=0;cnt< OrdersTotal();cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderSymbol()==Symbol()

{

if(OrderOpenTime()>open_time)

open_time=OrderOpenTime();

}

}

 
OrderSelect(OrdersTotal(),SELECT_BY_POS,MODE_TRADES);

выбрать ордер 12 если всего ордеров 11! Как?

ОрдерсТотал - показывает сколько ордеров есть. Если вам нужен последний ордер, так говоря первый с низу, тогда нужно OrdersTotal()-1, если нужен первый со списка тогда просто 0 (ноль).

if (OrdersTotalMagicbuy(Magicbuy)==0)
Это чета не понятно!
 

Опять же, по-русски пишешь

Print("открываем продажу ",OrderMagicNumber ());
а выставляешь ордер на покупку.

 

ticketsell = OrderSend(Symbol(),OP_BUY,lotsbuy*mult,openprice-step,3,0,0,"Grail",Magicsell,0,Red);

ticketbuy = OrderSend(Symbol(),OP_BUY,lotsbuy*mult,openprice,3,0,0,"Grail",Magicbuy,0,Blue);



a nado:


ticketsell = OrderSend(Symbol(),OP_BUY,lotsbuy*mult,Ask,3,0,0,"Grail",Magicsell,0,Red);

ticketbuy = OrderSend(Symbol(),OP_BUY,lotsbuy*mult,Ask,3,0,0,"Grail",Magicbuy,0,Blue);

Причина обращения: