Хоть с начала историю перебирайте, хоть с конца. Разницы никакой нет. Всё равно, функция ищет ордер с самым поздним временем закрытия. А если вы хотите сделать удаление или закрытие ордеров, то там нужно делать перебор с конца списка. Иначе, цикл будет пропускать ордера.
В этом случае разницы никакой. Цикл от OrersTotal до 0 обязательно должен быть только в случае закрытия позиций или удаления ордеров. В остальных случаях на любителя.
Хоть с начала историю перебирайте, хоть с конца. Разницы никакой нет. Всё равно, функция ищет ордер с самым поздним временем закрытия. А если вы хотите сделать удаление или закрытие ордеров, то там нужно делать перебор с конца списка. Иначе, цикл будет пропускать ордера.
Если функция ищет ордер с самым последним временем закрытия, то и поиск, очевидно, будет быстрее не с начала истории, а с конца - от текущего времени к прошлому.
Если функция ищет ордер с самым последним временем закрытия, то и поиск, очевидно, будет быстрее не с начала истории, а с конца - от текущего времени к прошлому.
В обратном направлении функция найдет ордер с самым поздним временем закрытия быстрее, не сменит его до конца цикла и вернет результат. В прямом направлении она будет перебирать все ордера и вернет один из последних ордеров. Разница в том, что переменные будут перезаписываться на каждом проходе цикла. Да. Она есть. Но, думаю, несущественная. Хотя я быпредпочёл цикл в обратном направлении, нежели в прямом. Несмотря на то что так или иначе функция будет работать.
Хоть с начала историю перебирайте, хоть с конца. Разницы никакой нет. Всё равно, функция ищет ордер с самым поздним временем закрытия. А если вы хотите сделать удаление или закрытие ордеров, то там нужно делать перебор с конца списка. Иначе, цикл будет пропускать ордера.
в общем, я сделал два полностью идентичных советника, Кроме подсчета лотности ордеров!!. и вот результат:
НЕ работает (т.е. не открывает BAY вместо SELL)
voidOnTick()
{
// Получим значение индикатора
dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.// Если нет открытых ордеров, то входим в условиеif(CountOrders()==0)
{
//Если появился сигнал на покупку, то откроем ордер на покупкуif(bSignalBuy())
{
if(GetLotSize()>LotControl) vOrderOpenSell();
else vOrderOpenBuy();
}
// Если появился сигнал на продажу, то откроем ордер на продажуif(bSignalSell())
{
if(GetLotSize()>LotControl) vOrderOpenBuy();
else vOrderOpenSell();
}
}
}
,,,
double GetLotSize()
{
double Ls=0;
for(int pos=OrdersTotal()-1;pos>=0;pos--)
{
if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic)
{
if(OrderType()==OP_BUY || OrderType()==OP_SELL) {Ls=OrderLots();}
}
}
}
return Ls;
}
РАБОТАЕТ ( (т.е. открывает BAY вместо SELL)
voidOnTick()
{
// Получим значение индикатора
dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.// Если нет открытых ордеров, то входим в условиеif(CountOrders()==0)
{
//Если появился сигнал на покупку, то откроем ордер на покупкуif(bSignalBuy())
{
if(GetLotSize()>LotControl) vOrderOpenSell();
else vOrderOpenBuy();
}
// Если появился сигнал на продажу, то откроем ордер на продажуif(bSignalSell())
{
if(GetLotSize()>LotControl) vOrderOpenBuy();
else vOrderOpenSell();
}
}
}
...
double GetLotSize()
{
double Ls=0;
datetime t=0;
int i=OrdersHistoryTotal();
for(int pos=0; pos<i; pos++)
{
if(OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY))
{
if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic)
{
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
if(t<OrderCloseTime()) {t=OrderCloseTime(); Ls=OrderLots();}
}
}
}
}
return Ls;
}
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
на сколько я вижу, то разница в следующем:
Хоть с начала историю перебирайте, хоть с конца. Разницы никакой нет. Всё равно, функция ищет ордер с самым поздним временем закрытия. А если вы хотите сделать удаление или закрытие ордеров, то там нужно делать перебор с конца списка. Иначе, цикл будет пропускать ордера.
на сколько я вижу, то разница в следующем:
В этом случае разницы никакой. Цикл от OrersTotal до 0 обязательно должен быть только в случае закрытия позиций или удаления ордеров. В остальных случаях на любителя.
Хоть с начала историю перебирайте, хоть с конца. Разницы никакой нет. Всё равно, функция ищет ордер с самым поздним временем закрытия. А если вы хотите сделать удаление или закрытие ордеров, то там нужно делать перебор с конца списка. Иначе, цикл будет пропускать ордера.
Если функция ищет ордер с самым последним временем закрытия, то и поиск, очевидно, будет быстрее не с начала истории, а с конца - от текущего времени к прошлому.
Если функция ищет ордер с самым последним временем закрытия, то и поиск, очевидно, будет быстрее не с начала истории, а с конца - от текущего времени к прошлому.
В обратном направлении функция найдет ордер с самым поздним временем закрытия быстрее, не сменит его до конца цикла и вернет результат. В прямом направлении она будет перебирать все ордера и вернет один из последних ордеров. Разница в том, что переменные будут перезаписываться на каждом проходе цикла. Да. Она есть. Но, думаю, несущественная. Хотя я бы предпочёл цикл в обратном направлении, нежели в прямом. Несмотря на то что так или иначе функция будет работать.
Всем привет, если ли способ переключаться между окнами графиков программно , то есть делать любой график активным из программы?
Есть
Показ графика поверх всех других
bool
Есть
Показ графика поверх всех других
bool
Благодарю!
Хоть с начала историю перебирайте, хоть с конца. Разницы никакой нет. Всё равно, функция ищет ордер с самым поздним временем закрытия. А если вы хотите сделать удаление или закрытие ордеров, то там нужно делать перебор с конца списка. Иначе, цикл будет пропускать ордера.
в общем, я сделал два полностью идентичных советника, Кроме подсчета лотности ордеров!!. и вот результат:
НЕ работает (т.е. не открывает BAY вместо SELL)
РАБОТАЕТ ( (т.е. открывает BAY вместо SELL)
в общем, я сделал два полностью идентичных советника, Кроме подсчета лотности ордеров!!. и вот результат:
НЕ работает (т.е. не открывает BAY вместо SELL)
РАБОТАЕТ ( (т.е. открывает BAY вместо SELL)
Еще раз делаю акцент в чем разница
1 вариант
2 вариант
в общем, я сделал два полностью идентичных советника, Кроме подсчета лотности ордеров!!. и вот результат:
НЕ работает (т.е. не открывает BAY вместо SELL)
РАБОТАЕТ ( (т.е. открывает BAY вместо SELL)
Пробуйте разбираться в том что вы кодите, а не слепо копируйте OrdersTotal, OrdersHistoryTotal,
OrderSelect
pool=MODE_TRADES
[in] Источник данных для выбора. Используется, когда параметр select равен SELECT_BY_POS. Mожет быть одной из следующих величин:
MODE_TRADES (по умолчанию) - ордер выбирается среди открытых и отложенных ордеров,MODE_HISTORY - ордер выбирается среди закрытых и удаленных ордеров.