oleguitar Опубликовано 1 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 октября, 2014 Цитата А если у Вас работает ещё один советник на счёте? и два последних ордера чужие? Сначала по меджику фильтровать наверное, потом циклМне еще интересна вещь одна... а можно ли ордер сделать как бы виртуальным?То есть выполнились условия для открытия, но первый раз ордер не открываем, а второй раз уже можно.У меня есть идея, но может проще как можно... Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 1 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 октября, 2014 Сначала по меджику фильтровать наверное, потом цикл Да, но мы-то говорим о OrdersHistoryTotal() - эта функция фильтровать не умеет. Цитата Мне еще интересна вещь одна... а можно ли ордер сделать как бы виртуальным? Чего-ж проще - после выполнения условий сохраняйте цену, а потом от этой цены рассчитывайте СЛ или ТП... Ссылка на сообщение Поделиться на другие сайты More sharing options...
oleguitar Опубликовано 1 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 октября, 2014 Цитата Да, но мы-то говорим о OrdersHistoryTotal() - эта функция фильтровать не умеет. А выход какой-нибудь есть? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 1 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 октября, 2014 Цитата Да, но мы-то говорим о OrdersHistoryTotal() - эта функция фильтровать не умеет. А выход какой-нибудь есть?Вам нужен предпоследний закрытый Вашей совой ордер? если да, то просто добавьте в Ваш код счетчик - i++; Находите 1 ордер i=1, находите 2 - i=2 и если (i=2) break;Если нужны все значения - то массив Profit[ i] = OrderProfit()+...; i++; Ссылка на сообщение Поделиться на другие сайты More sharing options...
Silentspec Опубликовано 2 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 октября, 2014 Прошу помочь с функцией открытия ордеров: Спойлер //+------------------------------------------------------------------+//| Открытие ордера |//+------------------------------------------------------------------+// Учтены проверки:// 1. Связь с сервером и в случае отсутствия сканирует серверы и // реконнектится RetryAttempts раз.// 2. Торговый поток. Если он занят, ждет и пробует снова RetryAttempts раз.// 3. Разрешенность торговли. Если запрещено, ждет и пробует снова // RetryAttempts раз.// 4. Остановку работы пользователем.// 5. Правильность задания цены активации отложек. Если не правильно задана цена, открываем по рынку.// 6. Проверка стопов и тейков на стоплевел и корректировка по его размеру.// 7. Обработка ошибок. Те, что возможно исправить, пробуем исправить.// 8. Если цена отложки слишком близко к рынку, открываемся по рынку.// 9. Если цена для рыночного ордера ушла от цены нашего открытия на MaxOpenOrdDev пунктов и выше, выходим.// Исправить:// 1. Добавить ецн режим. Проставлять стопы с тейками после открытия.// 2. if (error==0) // {// EAComment(" Ордер успешно открыт.");// if(!OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES)) EAComment(" Ошибка доступа к ордеру!!"); // OrderPrint(); // return(ticket);// }// Вроде как может не работать, может не найти сразу новый ордер по тикету???? Нужна задержка????int SendOrder(string symbol, int cmd, double lot, double price, double stoploss, double takeprofit) { int cnt=0, error=GetLastError(), ticket=-1; bool exit_loop=false, limit_to_market=false; EAComment(" Попытка открыть "+OrderTypeToString(cmd)+" лотом "+DoubleToString(lot,LotDigits)+" по цене "+DoubleToString(price,PriceDigits)+ " sl:"+DoubleToString(stoploss,PriceDigits)+" tp:"+DoubleToString(takeprofit,PriceDigits));// Основные проверки на состояние, если пройдены, продолжим. if(ConditionCheck() { EAComment(" Не смогли открыть ордер!"); return(-1); }// Теперь нормализуем все переданные функции цены price=NormalizeDouble(price,PriceDigits); stoploss=NormalizeDouble(stoploss,PriceDigits); takeprofit=NormalizeDouble(takeprofit,PriceDigits);// Проверим стопы и тейки на близость к рынку (на стоплевел) if(stoploss>0) stoploss=StopLevelCheck(cmd,price,stoploss); if(takeprofit>0) takeprofit=TakeLevelCheck(cmd,price,takeprofit); error = 0;// Цвет значка открытия: if(cmd==OP_BUY||cmd==OP_BUYLIMIT||cmd==OP_BUYSTOP) arrow_color=Blue; if(cmd==OP_SELL||cmd==OP_SELLLIMIT||cmd==OP_SELLSTOP) arrow_color=Red;// Проверка цены открытия для отложек, если все плохо, открываем по рынку. if(cmd==OP_BUYLIMIT&&Ask { EAComment(" Неправильная цена для байлимит ордера: Цена установки выше текущей цены!"); cmd=OP_BUY; price=Ask; } if(cmd==OP_SELLLIMIT&&Bid>price) { EAComment(" Неправильная цена для селллимит ордера: Цена установки ниже текущей цены!"); cmd=OP_SELL; price=Bid; } if(cmd==OP_BUYSTOP&&Ask>price) { EAComment(" Неправильная цена для байстоп ордера: Цена установки ниже текущей цены!"); cmd=OP_BUY; price=Ask; } if(cmd==OP_SELLSTOP&&Bid { EAComment(" Неправильная цена для селлстоп ордера: Цена установки выше текущей цены!"); cmd=OP_SELL; price=Bid; }// Лимитные и стоповые ордера if (cmd==OP_BUYSTOP||cmd==OP_SELLSTOP||cmd==OP_BUYLIMIT||cmd==OP_SELLLIMIT) { cnt=0; while (!exit_loop) { //Пробуем открыть ордер: if (IsTradeAllowed()) { ticket=OrderSend(symbol, cmd, lot, price, slippage, stoploss, takeprofit, ExpertName+ " Magic:"+IntegerToString(magic), magic, 0, arrow_color); error=GetLastError(); } else cnt++; // Если не вышло, накручиваем счетчик попыток //И разбираемся в причине: switch (error) { case 0: //Если все ок, выходим из цикла exit_loop = true; break; case 4: //Торговый сервер занят. case 6: //Нет связи с торговым сервером. case 129: //Неправильная цена Bid или Ask, возможно, ненормализованная цена. case 132: //Рынок закрыт. case 137: //Брокер занят. case 145: //Модификация запрещена, так как ордер слишком близок к рынку. case 146: //Подсистема торговли занята. ReConnect(); // Делаем реконнект cnt++; break; case 135: //Цена изменилась. case 136: //Нет цен. case 138: //Запрошенная цена устарела, либо перепутаны Bid и Ask. RefreshRates(); continue; case 130: //Слишком близкие стопы или неправильно рассчитанные цены { // Проверяем на близость цены установки к рынку (стопы и тейки уже проверили) double ServerMinStop=StopLevel*PricePoint; if (cmd==OP_BUYSTOP||cmd==OP_BUYLIMIT) { if (MathAbs(Ask-price) limit_to_market=true; } if (cmd==OP_SELLSTOP||cmd==OP_SELLLIMIT) { if (MathAbs(Bid-price) limit_to_market = true; } exit_loop = true; break; } default: exit_loop = true; break; } //Если количество попыток превысило допустимое, выходим if (cnt>RetryAttempts) exit_loop=true; // Сообщаем о неудачном открытии ордера if (exit_loop) { if (error!=0) EAComment(" Неисправимая ошибка:" + NoRetryError(error)); if (cnt>RetryAttempts) EAComment(" Количество попыток достигло максимального "+IntegerToString(RetryAttempts)); } // Если выходить рано if (!exit_loop) { EAComment(" Ошибка при попытке (№ "+IntegerToString(cnt)+" из "+IntegerToString(RetryAttempts)+"): " + RetryError(error)); SleepRandomTime(); RefreshRates(); } } // Вышли из цикла. Если нет ошибок, сообщаем об открытии и возвращаем тикет ордера: if (error==0) { EAComment(" Успешно установили отложенный ордер."); if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES)) { OrderPrint(); return(ticket); } } // Если была ошибка и ордер не открыли: if (!limit_to_market) { EAComment(" Не смогли установить отложенный ордер после "+IntegerToString(cnt)+" попыток"); EAComment(" Ордер: " + OrderTypeToString(cmd)+" лотом "+DoubleToString(lot,LotDigits)+" по цене "+DoubleToString(price,PriceDigits)+" sl:"+ DoubleToString(stoploss,PriceDigits)+" tp:"+DoubleToString(takeprofit,PriceDigits)); EAComment(" Последняя ошибка: "+IntegerToString(GetLastError())); return(-1); } } // Если отложка была близко к рынку: if (limit_to_market) { EAComment(" Открываем отложенный ордер по рынку, так как цена слишком близко."); if (cmd==OP_BUYSTOP||cmd==OP_BUYLIMIT) { cmd=OP_BUY; price=Ask; } else if (cmd==OP_SELLSTOP||cmd == OP_SELLLIMIT) { cmd=OP_SELL; price=Bid; } }// Открытие по рынку error=GetLastError(); error=0; ticket=-1; if (cmd==OP_BUY||cmd==OP_SELL) { cnt=0; while (!exit_loop) { if (IsTradeAllowed()) { // Если цена ушла от цены открытия на MaxOpenOrdDev пунктов и выше, выходим. RefreshRates(); if(cmd==OP_BUY) { if(MathAbs(price-Ask)>MaxOpenOrdDev*PricePoint) { return(-1); EAComment(" Не смогли открыть ордер, цена ушла слишком далеко!"); } else price=Ask; } if(cmd==OP_SELL) { if(MathAbs(price-Bid)>MaxOpenOrdDev*PricePoint) { return(-1); EAComment(" Не смогли открыть ордер, цена ушла слишком далеко!"); } else price=Bid; } // пробуем открыть ордер ticket=OrderSend(symbol, cmd, lot, price, slippage, stoploss, takeprofit, ExpertName+" Magic:"+IntegerToString(magic), magic, 0, arrow_color); error=GetLastError(); } // Если не вышло, крутим счетчик попыток else cnt++; // И разбираемся в причине switch (error) { case 0: exit_loop = true; break; case 4: //Торговый сервер занят. case 6: //Нет связи с торговым сервером. case 129: //Неправильная цена Bid или Ask, возможно, ненормализованная цена. case 132: //Рынок закрыт. case 137: //Брокер занят. case 145: //Модификация запрещена, так как ордер слишком близок к рынку. case 146: //Подсистема торговли занята. ReConnect(); // Делаем реконнект cnt++; break; case 135: //Цена изменилась. case 136: //Нет цен. case 138: //Запрошенная цена устарела, либо перепутаны Bid и Ask. RefreshRates(); continue; default: exit_loop = true; break; } if (cnt>RetryAttempts) exit_loop=true; if (!exit_loop) { EAComment(" Ошибка при попытке (№ "+IntegerToString(cnt)+" из "+IntegerToString(RetryAttempts)+"): " + RetryError(error)); SleepRandomTime(); RefreshRates(); } if (exit_loop) { if (error!=0) EAComment(" Неисправимая ошибка:" + NoRetryError(error)); if (cnt>RetryAttempts) EAComment(" Количество попыток достигло максимального "+IntegerToString(RetryAttempts)); } } if (error==0) { EAComment(" Ордер успешно открыт."); if(!OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES)) EAComment(" Ошибка доступа к ордеру!!"); OrderPrint(); return(ticket); } else { EAComment(" Не смогли открыть ордер после "+IntegerToString(cnt)+" попыток"); EAComment(" Ордер: " + OrderTypeToString(cmd)+" лотом "+DoubleToString(lot,LotDigits)+" по цене "+DoubleToString(price,PriceDigits)+ " sl:"+DoubleToString(stoploss,PriceDigits)+" tp:"+DoubleToString(takeprofit,PriceDigits)); EAComment(" Последняя ошибка: "+IntegerToString(GetLastError())); return(-1); } }return(0);} Вроде как может не работать, может не найти сразу новый ордер по тикету???? Нужна задержка????И нужна ли вообще такая проверка или если уж ордерсенд вернул тикет, значит ордер абсолютно точно открыт??? Спойлер if (error==0) {EAComment(" Ордер успешно открыт.");if(!OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES)) EAComment(" Ошибка доступа к ордеру!!"); OrderPrint(); return(ticket);} Подскажите, чего еще не хватает? Может совет какой? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 2 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 октября, 2014 Silentspec Стремишься к совершенству? :d Поддерживаю.имхо: если есть тикет, то значит ордер попал и зарегистрирован в базе брокера и по идее в ответе сервера вместе с номером тикета приходит и вся остальная инфа об ордере, т.е. МТ уже всё должен знать...Поэтому считаю эту проверку лишней.Проблема, которую встречал (торгуя вручную) после посыла запроса проходит несколько секунд в течение которых нет никакой реакции - ни реджекта, занятости или ещё чего. Как сова отрабатывает эту задержку не знаю... ошибки нет и тикета нет... - по идее должна ждать ответа от ОрдерСенд по-любому. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Silentspec Опубликовано 2 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 октября, 2014 0ll, понял, спасибо!Ну да, пытаюсь максимально улучшить используемую библиотеку по мере сил и возможностей...Так на глаз, может чего не хватает? :) Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 2 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 октября, 2014 Так на глаз, может чего не хватает? :)Хватает, даже лишнее есть!Я бы не реконнектился (особенно при "рынок закрыт" по выходным). МТ чётко отслеживает и сам реконнектится (следил за этим). Ставить Слип - не желательно - терминал повиснет, а если на нём ещё совы стоят? Выход только ставить таймер и по событию возвращаться в модуль открытия. (имхо)Ещё по другому можно скомпоновать код - более универсально, вынести обработчик ошибок и т.д.Ещё можно проверять последнее время сервера (если больше минуты - выход из цикла, кстати не знаешь: рефреш (при занятости брокера) вешает сову ?)Может оформить это всё в класс... 8-> 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Silentspec Опубликовано 2 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 октября, 2014 Спасибо за советы, буду дорабатывать.Нет, вроде как рефреш просто вернет в этом случае false и все.Мой реконнект: Спойлер #define WM_COMMAND 0x0111#import "user32.dll" int GetAncestor (int hWnd, int gaFlags); int PostMessageA (int hWnd, int Msg, int wParam, string lParam);#import//+------------------------------------------------------------------+//| Сканирование серверов и реконнект при обрыве связи |//+------------------------------------------------------------------+// Функция выполняет сканирование серверов брокера и реконнект в// случае обрыва связиvoid ReConnect(){// Получаем Handle терминала int MetaTrader = GetAncestor (WindowHandle (Symbol(), Period()), 2);// Команда пересканировать все сервера if (MetaTrader != 0) { PostMessageA (MetaTrader, WM_COMMAND, 37400, NULL); } return;} Мой слип: Спойлер //+------------------------------------------------------------------+//| Sleep |//+------------------------------------------------------------------+void SleepRandomTime() { if (IsTesting()||IsOptimization()) return; double tenths = MathCeil(SleepTime / 0.1); if (tenths double maxtenths = MathRound(SleepMaximum/0.1); double p = 1.0 - 1.0/tenths; Sleep(1000); for(int i=0; i if (MathRand() > p*32768) break; Sleep(1000); }} Изменено 2 октября, 2014 пользователем Silentspec 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
nikson84 Опубликовано 2 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 октября, 2014 Прошу помощи в реализации советника для работы с отложенными ордерами. Необходимо, чтобы советник выставлял сетку отложенных ордеров в определенное время с заданным шагом и лотом, по истечении времени закрывал открытые позиции и удалял не сработавшие ордера. Пробовал слепить из нескольких советников запутался вконец...Заранее спасибо 777.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 2 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 октября, 2014 За реконнект спасибо. Мне пока не нужно, но код интересен.А Слип он и в африке... Как писали метаквоты в МТ один поток на все совы, т.е. совы, установленные на один счёт, отрабатывают свой код в порядке очереди - соответственно Слип одной совы вешает всех. Поэтому стараюсь делать через таймер, но это сильно усложняет код, т.к. таймер может быть вызван из открытия, модификации или закрытия ордера - вот и мечтаю собраться с духом и сделать класс - вызвал и забыл... 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Silentspec Опубликовано 2 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 октября, 2014 Набросал рефреш с проверкой на получилось/не получилось обновить:) Спойлер //+------------------------------------------------------------------+//| Рефреш |//+------------------------------------------------------------------+bool Refresh(){bool exit_loop=false;int cnt=0;while (!exit_loop) { if(RefreshRates()) return(true); // Если получилось if(!RefreshRates()) // Если не получилось { EAComment(" Не удалось обновить цены (с "+IntegerToString(cnt)+" попыток из "+IntegerToString(RetryAttempts)+")"); cnt++; // Плюсуем счетчик SleepRandomTime(); // Подождем } if (cnt>RetryAttempts) { EAComment(" Не удалось обновить цены!"); exit_loop=true; // Если попыток много, выходим } }return(false);} теперь if(!Refresh()) ReConnect(); Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 2 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 октября, 2014 Silentspec иногда поражаюсь твоей работоспособности... прям как молодой... :dНо с рефрешем имхо - зря...Поясню моё имхо: в МТ идут котиры и МТ запоминает котиры и время по всем инструментам в своём потоке. В это время в другом потоке выполняются совы и индюки. Если у совы тяжёлая аналитика, то котир может устареть и рефреш тупо спрашивает МТ: "нет-ли посвежее", в ответ МТ отдаёт то, что есть(а может и ничего не делает - если устареть не успела).., на брокера доп.запрос НЕ отправляется!(имхо)Читаем справку: "Возвращает true, если данные обновлены, иначе false", т.е. false - значит, что данные ещё свежие! Ну и нахрен тогда это всё? сова будет в цикле ждать следующего тика по этому инструменту, а другие совы в терминале - курить..., а потом очередь дойдёт до след. совы с таким-же кодом и всё заново! Этак и терминал повесится. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Silentspec Опубликовано 2 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 октября, 2014 Да, чего то я перемудрил :)) Ссылка на сообщение Поделиться на другие сайты More sharing options...
Crik1978 Опубликовано 3 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 октября, 2014 Всем привет.Спасибо за видеоуроки, познавательно.Прошу помочь в следующем, необходимо чтобы происходит Тралл всех открытых сделок. Имеется следующий код:void Trall (){ for (int i = 0; i { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if (OrderType() == OP_BUY) { if (Bid-OrderOpenPrice()> TrailingStop*Point) { if (OrderStopLoss() { SL=NormalizeDouble(Bid-TrailingStop*Point,Digits); if (OrderStopLoss()!=SL) if (OrderModify(OrderTicket(), OrderOpenPrice(), SL, 0, 0)) { Print("Модифицирован"); } else Print ("нет"); } } } if (OrderType()== OP_SELL) { if (OrderOpenPrice()-Ask>= TrendStep*Point) { if (OrderStopLoss() >Ask+(TrailingStop+TrailingStep)*Point) { SL=NormalizeDouble(Ask+TrailingStop*Point,Digits); if (OrderStopLoss()!=SL) if (OrderModify(OrderTicket(), OrderOpenPrice(), SL, 0, 0)) { Print("Модифицирован"); } else Print ("нет"); } } } } } }}при запуске на тестере не происходит трейлинг. Подскажите в чем проблема? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 4 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 октября, 2014 при запуске на тестере не происходит трейлинг. Подскажите в чем проблема?А что в журнале пишет?кроме этого, ничего не заметил:if (OrderOpenPrice()-Ask>= TrendStep*Point) Ссылка на сообщение Поделиться на другие сайты More sharing options...
Strong-Tezis Опубликовано 4 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 октября, 2014 Здравствуйте. Помогите пожалуйста. Прошу не смейтесь только)). Я вообще в mql не понимаю. Скажите что надо дописать или написать, чтобы горизонтальные линии индикатора не шли бесконечно вправо, т.е. нужно заменить луч, на линию до текущего бара. Индикатор приложил чтоб понятно было о чем речь, но хотелось бы научиться! Заранее благодарен. FiboPiv_v2.3_indikatorforeks.ru.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 4 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 октября, 2014 В индюке использованы горизонтальные линии и нужно поменять время окончания линии (выделено): ObjectCreate(name, OBJ_HLINE, 0, Time[0], lvl,Time[0],lvl);пробуйте так: ObjectCreate(name, OBJ_TREND, 0, Time[0], lvl,Time[9],lvl); Ссылка на сообщение Поделиться на другие сайты More sharing options...
Strong-Tezis Опубликовано 4 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 октября, 2014 Спасибо за отклик, но не помогло((Зеленым выделил, то что хотелось бы иметь. (там пример с индикатором другим)Нужно чтобы линия шла до отступа, не дальше. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 4 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 октября, 2014 Пробуй. Добавил:ObjectSet(name, OBJPROP_RAY, 0); FiboPiv_v2.3_indikatorforeks.ru.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Strong-Tezis Опубликовано 4 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 октября, 2014 Спасибо большое)) а я писал ray_right=false))) Спасибо еще раз, научили!!!)) теперь исправлю ObjectCreate(name, OBJ_TREND, 0, Time[0], lvl,Time[9],lvl); поставлю больше свечей и вообще огонь)) Ссылка на сообщение Поделиться на другие сайты More sharing options...
Yura Vakulenko Опубликовано 5 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 октября, 2014 привет, друзья, подскажите.. как проверить такое условие..если значение переменной на баре 1 принадлежит диапазону [1..6] (1 и 6 включены в диапазон), а ее значение на баре 2 было меньше 0, тогда условие вернону и для отрицательного диапазона если значение переменной на баре 1 принадлежит диапазону [-1..-6] (-1 и -6 включены в диапазон), а ее значение на баре 2 было больше 0, тогда условие верноСама переменная - это сложная функция, результаты расчетов которой записываются в массив doubleподскажите код? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 5 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 октября, 2014 Yura Vakulenko- Назовём Вашу переменную Val1 - на 1 баре и Val2 на 2-м- Сначала надо сохранить пред. значение в Val2 = Val1- Вы рассчитали значение на 1 баре и записали в переменную Val1 = f()- проверка: if (Val1 >= 1 && Val1 Реально в чате не удобно подобные вещи обсуждать... Ссылка на сообщение Поделиться на другие сайты More sharing options...
Yura Vakulenko Опубликовано 5 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 октября, 2014 Yura Vakulenko- Назовём Вашу переменную Val1 - на 1 баре и Val2 на 2-м- Сначала надо сохранить пред. значение в Val2 = Val1- Вы рассчитали значение на 1 баре и записали в переменную Val1 = f()- проверка: if (Val1 >= 1 && Val1 Реально в чате не удобно подобные вещи обсуждать... Ок, спасибо.. сейчас буду программировать. Отпишусь о результатах.. Ну это мне нужно для проверок значений индикатора ССI.. буду химичить.. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Crik1978 Опубликовано 5 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 октября, 2014 при запуске на тестере не происходит трейлинг. Подскажите в чем проблема?А что в журнале пишет?кроме этого, ничего не заметил:if (OrderOpenPrice()-Ask>= TrendStep*Point) ну да, косякв журнале не отображается ничего, кроме открытия последнего ордера. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти