Подскажите пожалуйста, как правильно написать код при торговле советником в МТ4, сам в программировании очень новичок.
Мне нужно выбрать последний закрытый ордер и сравнить профит, по условию если профит ордера больше 0 то, не чего не делать, если меньше 0 то что либо сделать.
Подскажите пожалуйста, как правильно написать код при торговле советником в МТ4, сам в программировании очень новичок.
Мне нужно выбрать последний закрытый ордер и сравнить профит, по условию если профит ордера больше 0 то, не чего не делать, если меньше 0 то что либо сделать.
С уважением, Александр.
//+------------------------------------------------------------------+datetime time=0; double profit=0,lots=0;
for(int i=OrdersHistoryTotal()-1; i>=0; i--)
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
if(OrderSymbol()==_Symbol)
if(OrderMagicNumber()==MagicNumber || MagicNumber==-1)
if(OrderCloseTime()>time) // находим последний в истории ордер
{
time=OrderCloseTime(); // запомним время
profit=OrderProfit(); // запомним профит
his_lt=OrderLots(); // запомним лот
}
if(profit<0) //если профит меньше нуля
lots=his_lt*2; // Увеличим в два раза//+------------------------------------------------------------------+
Интересно, а для чего time, для чего время закрытия запоминаете, если всё-равно последний в списке выбираете, да ещё и цикл? И почему не учитываете своп и комиссию? Даже при OrderProfit()>0, его реальный профит может быть отрицательным. Вы уж если работаете сразу со списком ордеров, то не нужно и оставлять куски от кода цикла поиска последнего по времени закрытия. Что-то одно - либо надёжность и уверенность, либо скорость. А у вас мешанина.
Artyom Trishkin: Интересно, а для чего time, для чего время закрытия запоминаете, если всё-равно последний в списке выбираете, да ещё и цикл? И почему не учитываете своп и комиссию? Даже при OrderProfit()>0, его реальный профит может быть отрицательным. Вы уж если работаете сразу со списком ордеров, то не нужно и оставлять куски от кода цикла поиска последнего по времени закрытия. Что-то одно - либо надёжность и уверенность, либо скорость. А у вас мешанина.
Подскажите пожалуйста как в MQL4 на MT4 сделать так чтобы открытый ордер закрывался через 20 баров, то есть, открыл ордер, и как появилось 20 новых баров - ордер закрылся. (открыт всегда только 1 ордер). У меня почему-то данный код не работает в тестере стратегий, а нужно чтобы работал.
смысл этого кода такой: проверяем есть ли открытые ордера, если нет, то открываем ордер и записываем в переменную "z" цену открытия 1-бара, затем с каждым тиком проверяем цену открытия 20-го бара, и когда тот самый 1-й бар со временем станет 20-м то и цена его будет совпадать с ценой записанной в переменную "z", после чего ордер будет закрыт. (конечно в процессе могут возникнуть совпадения цен, но это будет очень редко, к тому же можно записать еще несколько параметров 1-го бара в переменные)
double z; //объявление переменной//ОТКРЫТИЕ ОРДЕРАif(OrdersTotal() == 0) // если нет открытых ордеров то открывать ордер
{
OrderSend(Symbol(), OP_SELL, 0.1, Bid, 3, Bid+150*Point, Bid-10*Point);
z = Open[1]; // здесь переменной "z" присваивается цена открытия 1-го бара
}
elsePrint("ORDER NE USTANOVLEN!!!");
//ЗАКРЫТИЕ ОРДЕРАif (z==Open[20]) //если цена записанная в переменную "z" равна цене 20-го бара, то закрывать ордер
{
//-----------------код закрывает все ордера--------------------bool result;
int error;
while (OrdersTotal()>0)
{
if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
{ if(OrderType()==OP_BUY) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),MarketInfo(OrderSymbol(),MODE_DIGITS)),3,CLR_NONE);
if(OrderType()==OP_SELL) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),MarketInfo(OrderSymbol(),MODE_DIGITS)),3,CLR_NONE);
if (OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP || OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP)
OrderDelete(OrderTicket());
if(result!=TRUE) { error=GetLastError();
Print("LastError = ",error, " ",Symbol()); }
else error=0; }
elsePrint( "Error when order select ", GetLastError());
}
//------------конец кода закрывающего ордер------------------
}
elsePrint("ORDER NE ZAKRYT!!!");
Подскажите пожалуйста как в MQL4 на MT4 сделать так чтобы открытый ордер закрывался через 20 баров, то есть, открыл ордер, и как появилось 20 новых баров - ордер закрылся. (открыт всегда только 1 ордер). У меня почему-то данный код не работает в тестере стратегий, а нужно чтобы работал.
смысл этого кода такой: проверяем есть ли открытые ордера, если нет, то открываем ордер и записываем в переменную "z" цену открытия 1-бара, затем с каждым тиком проверяем цену открытия 20-го бара, и когда тот самый 1-й бар со временем станет 20-м то и цена его будет совпадать с ценой записанной в переменную "z", после чего ордер будет закрыт. (конечно в процессе могут возникнуть совпадения цен, но это будет очень редко, к тому же можно записать еще несколько параметров 1-го бара в переменные)
всё, разобрался сам, нужно было объявлять переменную за пределами int start() - теперь работает нормально
Добрый день.
Подскажите пожалуйста, как правильно написать код при торговле советником в МТ4, сам в программировании очень новичок.
Мне нужно выбрать последний закрытый ордер и сравнить профит, по условию если профит ордера больше 0 то, не чего не делать, если меньше 0 то что либо сделать.
С уважением, Александр.
Добрый день.
Подскажите пожалуйста, как правильно написать код при торговле советником в МТ4, сам в программировании очень новичок.
Мне нужно выбрать последний закрытый ордер и сравнить профит, по условию если профит ордера больше 0 то, не чего не делать, если меньше 0 то что либо сделать.
С уважением, Александр.
Интересно, а для чего time, для чего время закрытия запоминаете, если всё-равно последний в списке выбираете, да ещё и цикл? И почему не учитываете своп и комиссию? Даже при OrderProfit()>0, его реальный профит может быть отрицательным. Вы уж если работаете сразу со списком ордеров, то не нужно и оставлять куски от кода цикла поиска последнего по времени закрытия. Что-то одно - либо надёжность и уверенность, либо скорость. А у вас мешанина.
Вы предлагаете
Так делать ?
Человек просил только про ордер профит, зачем навяливать то чего не просили ? Но я с Вами согласен ....
Подскажите пожалуйста как в MQL4 на MT4 сделать так чтобы открытый ордер закрывался через 20 баров, то есть, открыл ордер, и как появилось 20 новых баров - ордер закрылся. (открыт всегда только 1 ордер). У меня почему-то данный код не работает в тестере стратегий, а нужно чтобы работал.
смысл этого кода такой: проверяем есть ли открытые ордера, если нет, то открываем ордер и записываем в переменную "z" цену открытия 1-бара, затем с каждым тиком проверяем цену открытия 20-го бара, и когда тот самый 1-й бар со временем станет 20-м то и цена его будет совпадать с ценой записанной в переменную "z", после чего ордер будет закрыт. (конечно в процессе могут возникнуть совпадения цен, но это будет очень редко, к тому же можно записать еще несколько параметров 1-го бара в переменные)
Подскажите пожалуйста как в MQL4 на MT4 сделать так чтобы открытый ордер закрывался через 20 баров, то есть, открыл ордер, и как появилось 20 новых баров - ордер закрылся. (открыт всегда только 1 ордер). У меня почему-то данный код не работает в тестере стратегий, а нужно чтобы работал.
смысл этого кода такой: проверяем есть ли открытые ордера, если нет, то открываем ордер и записываем в переменную "z" цену открытия 1-бара, затем с каждым тиком проверяем цену открытия 20-го бара, и когда тот самый 1-й бар со временем станет 20-м то и цена его будет совпадать с ценой записанной в переменную "z", после чего ордер будет закрыт. (конечно в процессе могут возникнуть совпадения цен, но это будет очень редко, к тому же можно записать еще несколько параметров 1-го бара в переменные)
всё, разобрался сам, нужно было объявлять переменную за пределами int start() - теперь работает нормально
Я Вам упростил чуть чуть, но в вашем коде всё равно есть ошибки
Пишу мультивалютный советник но никак не могу понять почему если советник вешаю на разные валюты то возвращает разные цены в одно и то же время
Если кратко то по коду:
в Init
в OnTimer()
Если тестирую советника на EURNZD то к примеру
2015.05.18 00:07:00 Lat Ask: 1.5370
Если советника вешаю на любую другую валютную пару
2015.05.18 00:07:00 Lat Ask: 1.5323
значения кардинально разные, причем во втором случает по графику, такого значения не могло быть как минимум несколько часов
В тестере в режиме торговли стоят все тики, такое чувство что если не основная пара то значения в тестере приближенные
Забыл добавить что это Meta Trade 5
Выяснилось что первый раз запускаешь цена неправильная, повторно делаешь тест цена нормальная
Как затереть полностью авточартис?