Прям заинтриговал. Покажи, что такое каша, скриншотом хоть.
Это 509 билд.Индикатор METRO. Совершенно нормальный - не декомпил.
Прям заинтриговал. Покажи, что такое каша, скриншотом хоть.
Душераздирающее зрелище. o_oЭто 509 билд.Индикатор METRO. Совершенно нормальный - не декомпил.
Душераздирающее зрелище. o_o
Наверное стоит все-таки переустановить терминал. В корень.
1. OrderType это функция. Значить должны быть круглые скобки OrderType()Приветствую! Не могу разобраться с одним вопросом, прошу помочь. буду благодарен!
Не получается выставить 2 отложенных ордера по Хай и Лоу закрывшейся свечи.
Собственно нужно просто выставить отложенные ордера по Хай и Лоу, со SL и TP.
Если один отложенный сработал,то второй удаляем.
написал код,но не получается почему-то. подскажите пожалуйста, что не так, что надо добавить ?
for (int i=0; i<=OrdersTotal(); i++)
{
OrderSelect (i,SELECT_BY_POS);
if (OrderType==0)
{
if (OrderType==OP_SELLSTOP) OrderDelete (OrderTicket() );
}
if OrderType==1)
{
if (OrderType==OP_BUYSTOP) OrderDelete (OrderTicket() );
}
}
if (OrdersTotal()==0)
{
OrderSend (Symbol(),OP_SELLSTOP, lot, iLow (Symbol(), 0, 1), slipp, Bid+SL*Point, Bid-TP*Point);
OrderSend (Symbol(),OP_BUYSTOP, lot, iHigh(Symbol(), 0 ,1), slipp, Ask-SL*Point, Ask+TP*Point);
}
1. Да, я знаю что это функция, просто забыл дописать скобки. В редакторе этого не забываю.
2.Я новичок в программировании, и в данном примере логика моя такая: если тип ордера Бай, значит отложник Бай сработал, нам нужно удалить SellStop.
А как удалить SellStop, если сработал БайСтоп ? подскажите.
3. Наверное лучше модифицировать ордер, если он сработал ?
Почему все таки выставляется только один отложенный ордер ? ведь нужно, чтобы выставилось 2 ордера.
А какие сведения нужно собрать ?
bool buy=false, sell=false;
int buystop_ticket=0, sellstop_ticket=0;
//Сбор сведений
for (int i=0; i<=OrdersTotal(); i++)
{
OrderSelect (i,SELECT_BY_POS);
if (OrderType()==OP_BUY) buy=true;
if OrderType()==OP_SELL) sell=true;
if (OrderType()==OP_BUYSTOP) buystop_ticket=OrderTicket();
if (OrderType()==OP_SELLSTOP) sellstop_ticket=OrderTicket();
}
//Удаление отложек
if(buy && sellstop_ticket>0)OrderDelete (sellstop_ticket);
if(sell && buystop_ticket>0)OrderDelete (buystop_ticket);
//Установка ордеров
if(!buy && !sell && sellstop_ticket==0 && buystop_ticket==0)
{
OrderSend (Symbol(),OP_SELLSTOP, lot, iLow (Symbol(), 0, 1), slipp, iLow (Symbol(), 0, 1)+SL*Point, iLow (Symbol(), 0, 1)-TP*Point);
OrderSend (Symbol(),OP_BUYSTOP, lot, iHigh(Symbol(), 0 ,1), slipp, iHigh(Symbol(), 0 ,1)-SL*Point, iHigh(Symbol(), 0 ,1)+TP*Point);
}
Так вот тебе ответ.Почему все таки выставляется только один отложенный ордер ? ведь нужно, чтобы выставилось 2 ордера.
3. Почему при установке ордеров, стоп лосс и тейк профит считается относительно текущей цены, а не относительно цены открытия ордера?
Извини. За основу брал твой код. Не все косяки в нём увидел сразу.Спасибо за код, узнал новое. Но код почему-то не работает, ни одного ордера не открывает. Вроде все правильно, но... Что тут не так ?
bool buy=false, sell=false;
int buystop_ticket=0, sellstop_ticket=0;
//Сбор сведений
for (int i=0; i[SIZE=5][B][COLOR=Red]<[/COLOR][/B][/SIZE]OrdersTotal(); i++)
{
OrderSelect (i,SELECT_BY_POS[SIZE=5][B][COLOR=Red],MODE_TRADES[/COLOR][/B][/SIZE]);
if (OrderType()==OP_BUY) buy=true;
if (OrderType()==OP_SELL) sell=true;
if (OrderType()==OP_BUYSTOP) buystop_ticket=OrderTicket();
if (OrderType()==OP_SELLSTOP) sellstop_ticket=OrderTicket();
}
//Удаление отложек
if(buy && sellstop_ticket>0)OrderDelete (sellstop_ticket);
if(sell && buystop_ticket>0)OrderDelete (buystop_ticket);
//Установка ордеров
if(!buy && !sell && sellstop_ticket==0 && buystop_ticket==0)
{
OrderSend (Symbol(),OP_SELLSTOP, lot, iLow (Symbol(), 0, 1), slipp, iLow (Symbol(), 0, 1)+SL*Point, iLow (Symbol(), 0, 1)-TP*Point);
OrderSend (Symbol(),OP_BUYSTOP, lot, iHigh(Symbol(), 0 ,1), slipp, iHigh(Symbol(), 0 ,1)-SL*Point, iHigh(Symbol(), 0 ,1)+TP*Point);
}
Там ещё в операторе цикла for, вместо <= надо <.Все заработало. До этого я не писал MODE_TRADES, теперь буду писать. Спасибо.
А в чём проблема? В функции OrderSend первый аргумент это символ по которому устанавливать. Нужно только цену открытия стоп лосс и тейк профит пересчитать под соответствующую пару.Как сделать мультивалютную торговлю, чтобы ордера одновременно открылись на 3 или 4 парах ???
Добрый день.Я в програмировании не очнь силен,а вернее,ОЧЕНЬ НЕ СИЛЕН....Господа програмисты,помогите,пожалуйста наложить стандартный мувинг с Метатрейдера на пользовательский индикатор, чтоб в пользовательском индикаторе был буфер для МА ,чтоб это стало единым индикатором.Сам пытался и долго ковырялся,но,видимо,где-то что-то не понимаю -- не получается.....
Может это не совсем относится к "помощи в програмировании",так я бы и заплатил....Буду тогда считать,что купил себе небольшой учебник по програмированию....
У тебя две проблемы.
Во-первых, в аттаче декомпилированный код. Приличные люди с декомпилами не связываются, в большинстве случаев это краденое. Компилироваться этот текст в последних версиях терминала все равно не станет, только время зря потратишь его переделывать.
Во вторых, идея встраивать машку в индюк вообще неудачная. Завтра ты захочешь полосы Боллинджера от своего индюка получить, послезавтра CCI - каждый раз добавлять буфера это не решение. Гораздо проще и гибче накладывать стандартные индикаторы типа МА на пользовательские используя опцию "Применить к первому|предыдущему (пользовательскому) индикатору". Если результат нужно получить внутри кода, то лучше написать (или найти готовую) МА, способную работать на внешнем индикаторе через iCustom().
codebase.mql4.com пошерстить, наверняка есть готовое решение, или набраться храбрости и самому написать, там весь код в полстранички уложится.Спасибо за разяснения.Действительно,последний,предложенный Вами вариант очень привлекателен.....Только вот где бы такую Машку найти?!
codebase.mql4.com пошерстить, наверняка есть готовое решение, или набраться храбрости и самому написать, там весь код в полстранички уложится.