voldemar227 Опубликовано 29 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 мая, 2015 А как же вы селлимитами собираетесь защититься ?ТЗ какое ?ну есть на франке бай и что мы ему лепить то будем бай стоп ? селл стоп? Бай лимит что ? Точно!!! Спасибо! Нам на бае Селл-стоп нужен. А у меня Селл-лимит.Осталось два вопроса:1. Отложенный ордер открывается на уровне открытия существующего ордера, а нужно чтобы к нему что-то добавлялось/отнималось (в моем коде это pointForOrder).2. Почему не срабатывает Print? У меня работает.//+------------------------------------------------------------------+//| Защитные отложенные ордера.mq4 |//| Copyright 2015, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright "Copyright 2015, MetaQuotes Software Corp."#property link "https://www.mql5.com"#property version "1.00"#property strictextern int pointForOrder = 500;extern int Slippage = 5;double open,pfo,volume;int digits;double point; // тип дабл//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+void OnStart() { double op=0,lt=0; string sy=NULL; for(int i=OrdersTotal()-1; i>=0; i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { op=OrderOpenPrice(); lt=OrderLots(); sy=OrderSymbol(); point=MarketInfo(sy,MODE_POINT); digits=(int)MarketInfo(sy,MODE_DIGITS); if(OrderType()==OP_BUY) { //if(digits == 3 || digits == 5) это дикий бред //{ // pfo *= 10; // Slippage *= 10; //} open=NormalizeDouble(op -pointForOrder*point,digits); if(OrderSend(sy,OP_SELLSTOP,lt,open,Slippage,0,0)>=0) Print("Успешно по символу ",sy); else Print("Ошибка по символу ",sy," ",GetLastError()," ",open); } if(OrderType()==OP_SELL) { open=NormalizeDouble(op+pointForOrder*point,digits); if(OrderSend(sy,OP_BUYSTOP,lt,open,Slippage,0,0)>=0) Print("Успешно по символу ",sy); else Print("Ошибка по символу ",sy," ",GetLastError()," ",open); } } else return; }//+------------------------------------------------------------------+ 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Gleb Опубликовано 29 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 мая, 2015 У меня работает. Блин, ошибка оказалась именно в типе Point!!! Я думал, что размер пункта в целый числах!Почему ты считаешь проверку Digits бредом? У меня на Демо 4 знака, на Реале 5 знаков. Допустим pointForOrder = 500. Если покупаю на демо по цене 1,0900, то отложка выставляется на 1,0400.Если покупаю на реале, то здесь уже вменяемая отложка 1,0850.Также не разобрался, почему Print не работает. Запустил твой код, во вложении скрин (к названию добавил "1", чтобы не конфликтовал с моим файлом)Print.jpg 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
voldemar227 Опубликовано 29 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 мая, 2015 У меня работает. Блин, ошибка оказалась именно в типе Point!!! Я думал, что размер пункта в целый числах!Почему ты считаешь проверку Digits бредом? У меня на Демо 4 знака, на Реале 5 знаков. Допустим pointForOrder = 500. Если покупаю на демо по цене 1,0900, то отложка выставляется на 1,0400.Если покупаю на реале, то здесь уже вменяемая отложка 1,0850.Также не разобрался, почему Print не работает. Запустил твой код, во вложении скрин (к названию добавил "1", чтобы не конфликтовал с моим файлом) возможно не в тот журнал смотришь.Второе проверка на дигитс не нужна, и не нужно писать тот бред который я назвал бредом.при установке скрипта выведи так что бы открывались настройки, и в зависимости от типа счета 4 или 5 знаков ставь значения 50 или 500 ... И не привыкай писать такой код, этот фрагмент использовался в 2006-2008 годах когда 5 значные брокеры только стали появляться и что бы не было путаницы писали этот фрагмент, сейчас каждый трейдер знает свой тип счета. Дадите свой код поюзать другу и друг сразу получит минуса ...Если собираетесь писать коды то учитесь правильному... 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Dron15 Опубликовано 3 июня, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 июня, 2015 { ticket = (OrderSend(Symbol(),OP_BUY , Lots,NormalizeDouble(Ask,Digits),Slippage,0,0,NULL,Magic,0,Red)==-1); // Print("Ошибка ",GetLastError()," открытия ордера "); if(ticket > 0) { TP = NormalizeDouble(Ask + TakeProfit * Point, Digits ); OrderModify(ticket,OrderOpenPrice(),0,TP,0,Red); }подскажите почему может ордер OrderModify возмущаться прямой ошибки нет а посылает предупреждение? Ссылка на сообщение Поделиться на другие сайты More sharing options...
voldemar227 Опубликовано 3 июня, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 июня, 2015 { ticket = (OrderSend(Symbol(),OP_BUY , Lots,NormalizeDouble(Ask,Digits),Slippage,0,0,NULL,Magic,0,Red)==-1); // Print("Ошибка ",GetLastError()," открытия ордера "); if(ticket > 0) { TP = NormalizeDouble(Ask + TakeProfit * Point, Digits ); OrderModify(ticket,OrderOpenPrice(),0,TP,0,Red); }подскажите почему может ордер OrderModify возмущаться прямой ошибки нет а посылает предупреждение? Вы не проверяете результат работы OrderModify Ссылка на сообщение Поделиться на другие сайты More sharing options...
Dron15 Опубликовано 3 июня, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 июня, 2015 { ticket = (OrderSend(Symbol(),OP_BUY , Lots,NormalizeDouble(Ask,Digits),Slippage,0,0,NULL,Magic,0,Red)==-1); // Print("Ошибка ",GetLastError()," открытия ордера "); if(ticket > 0) { TP = NormalizeDouble(Ask + TakeProfit * Point, Digits ); OrderModify(ticket,OrderOpenPrice(),0,TP,0,Red); }подскажите почему может ордер OrderModify возмущаться прямой ошибки нет а посылает предупреждение? Вы не проверяете результат работы OrderModify Если возможно покажите как правильно . Ссылка на сообщение Поделиться на другие сайты More sharing options...
voldemar227 Опубликовано 3 июня, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 июня, 2015 { ticket = (OrderSend(Symbol(),OP_BUY , Lots,NormalizeDouble(Ask,Digits),Slippage,0,0,NULL,Magic,0,Red)==-1); // Print("Ошибка ",GetLastError()," открытия ордера "); if(ticket > 0) { TP = NormalizeDouble(Ask + TakeProfit * Point, Digits ); OrderModify(ticket,OrderOpenPrice(),0,TP,0,Red); }подскажите почему может ордер OrderModify возмущаться прямой ошибки нет а посылает предупреждение? Вы не проверяете результат работы OrderModify Если возможно покажите как правильно . if( OrderModify(ticket,OrderOpenPrice(),0,TP,0,Red)==false)Print("OrderModify Error ", GetLastError());elsePrint("OrderModify Ok "); 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Dron15 Опубликовано 7 июня, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 июня, 2015 Помогите исправить ошибки , сам не справляюсь и покажите что не так чтоб мог проанализировать. Новый_текстовый_документ.txt Ссылка на сообщение Поделиться на другие сайты More sharing options...
voldemar227 Опубликовано 7 июня, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 июня, 2015 Помогите исправить ошибки , сам не справляюсь и покажите что не так чтоб мог проанализировать. Поправил ошибки, логических ошибок не искал...isprav.mq4 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Dron15 Опубликовано 7 июня, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 июня, 2015 // int order_type= FindLastOrderType(); 1 ошибка else 2 ошибка Comment(" ордеров открыто "+(string)count); 3 ошибка Вроде бы все , а почему немогу мартин запустить по уроку смотрел вроде все верно ? Ссылка на сообщение Поделиться на другие сайты More sharing options...
voldemar227 Опубликовано 7 июня, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 июня, 2015 // int order_type= FindLastOrderType(); 1 ошибка else 2 ошибка Comment(" ордеров открыто "+(string)count); 3 ошибка Вроде бы все , а почему немогу мартин запустить по уроку смотрел вроде все верно ? потому что полно логических ошибок вот немного поправилisprav.mq4 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Dron15 Опубликовано 7 июня, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 июня, 2015 // int order_type= FindLastOrderType(); 1 ошибка else 2 ошибка Comment(" ордеров открыто "+(string)count); 3 ошибка Вроде бы все , а почему немогу мартин запустить по уроку смотрел вроде все верно ? потому что полно логических ошибок вот немного поправил спасибо буду разбираться у вас немного все по другому в функциях. Ссылка на сообщение Поделиться на другие сайты More sharing options...
voldemar227 Опубликовано 7 июня, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 июня, 2015 // int order_type= FindLastOrderType(); 1 ошибка else 2 ошибка Comment(" ордеров открыто "+(string)count); 3 ошибка Вроде бы все , а почему немогу мартин запустить по уроку смотрел вроде все верно ? потому что полно логических ошибок вот немного поправил спасибо буду разбираться у вас немного все по другому в функциях. Потому что в Ваших вариантах вы не правильно ищете последние ордера и лоты и цены....В общем разбирайтесь ... 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Dron15 Опубликовано 10 июня, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 июня, 2015 Eсли есть у кого пример трелинг стопа выложите файлик , не как не разберусь в логике , и среднюю цену сетки ордеров чтоб найти нужно OrderOpenTime * OrderLots/Count ? Ссылка на сообщение Поделиться на другие сайты More sharing options...
nct21 Опубликовано 11 июня, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 июня, 2015 Товарищи программисты, помогите, пожалуйста, написать правильно код:Условие: если предыдущий бар меньше 100 пунктов, то ...Пишу так (для бычьей свечи): if ((Close[1]-Open[1])*PointОшибку компилятор не выдает, но при работе советник не учитывает размер свечи (есть и другие условия для входа, размер свечи - один из них)! Как буд-то этого условия и нет вовсе! Что не правильно? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 11 июня, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 июня, 2015 nct21 надо: if ((Close[1]-Open[1]) / PointDron15 примеры трейлинга лучше поискать самому в кодабазе. у меня, конечно есть, но они уже очень не простые...А вычислять среднюю цену сетки лучше с учётом лотности, т.е. точку безубытка:сначала в цикле перебора ордеров сетки суммируем лотности ордеров и суммируем произведение лота на цену открытия.затем, по завершению цикла, делим сумму(лот*цена) / сумму(лот) ...{ aSumLot += OrderLots(); aSumPrcLot += OrderOpenPrice() * OrderLots(); ... } prc_bu = NormalizeDouble(aSumPrcLot / aSumLot,_Digits); Ссылка на сообщение Поделиться на другие сайты More sharing options...
Dron15 Опубликовано 11 июня, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 июня, 2015 Спасибо 0ll начну пробовать писать и как найти эту кодобазу ? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 11 июня, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 июня, 2015 Кодабаза Ссылка на сообщение Поделиться на другие сайты More sharing options...
Dron15 Опубликовано 13 июня, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 июня, 2015 Гляньте функцию пожалуйста ошибок не выдает видно логика неправильна не получается запустить модифи_ордерс.txt Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 13 июня, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 июня, 2015 Dron15 я посмотрел - там тихий ужас. x_xПо-моему Вы вообще не представляете что пишите. Без обид.Что это: OSL = NormalizeDouble(OrderStopLoss(),Digits)&& OrderType()== otype;SL = OSL;- не разгадал... тем более потом вычисляете SL, но не используете...OrderModify - там цена конкретного, модифицируемого ордера, а не БУ!По сути получается, что БУ вычислили, а что делать с ним не знаете?Порядок такой:- для трала есть 3 значения - дистанция для старта(tral_Start), дистанция СЛ(tral_Stop) и шаг изменения СЛ(tral_Step)1. вычислили БУ2. если от цены до БУ более чем tral_Start - включаем трал (больше ни для чего ЬУ не используется)3. если от цены до СЛ более чем tral_Stop + tral_Step - модифицируем ордера4. вычисляем СЛ = цена +- tral_Stop (это у Вас правильно)5. собственно цикл модификации Ссылка на сообщение Поделиться на другие сайты More sharing options...
Dron15 Опубликовано 13 июня, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 июня, 2015 Какие обиды могут быть я пришел учиться сюда так что мне обижаться ненашто , начинаю с 0 раньше вобще некогда нечего не писал. Пытаюсь понять логику. Самому тяжеловато все осваивать . Порядок написали как работает вот теперь начну что то ваять. Спасибо что отвечаете, может конечно сейчас мои написания выглядят глупо но думаю время все расставит на свои места. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 13 июня, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 июня, 2015 Dron15 не стесняйся пиши. Вам нужно в разных функциях это делать.1. при удачном открытии ордера вычисляем БУ (в отдельной функции или вместе с ф-цией контроля количества ордеров)2. в ф-ции Старт контролируем момент для запуска трала (дистанцию от цены до БУ и СЛ)3. если контроль сработал вычисляем новое значение СЛ4. запускаем ф-цию модификации и передаём туда тип ордеров и новый СЛ. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Crik1978 Опубликовано 15 июня, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 июня, 2015 Всем привет!Вопрос следующего характера. Как установить индикатор HMA Color на часовой график, но при этом данные чтобы брались с 4-х часового графика? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 15 июня, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 июня, 2015 Как установить индикатор HMA Color на часовой график, но при этом данные чтобы брались с 4-х часового графика?Не знаю на чём индюк построен, но если на МА, то надо просто в 4 раза период увеличить и всё. Ссылка на сообщение Поделиться на другие сайты More sharing options...
bzs Опубликовано 15 июня, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 июня, 2015 Привет все! Прошу подсказать новичку.По учебному курсу мучаю трейлинг-стопы. Отладку не получается использовать. Пытаюсь через Print вывести время, в котором произошел вход в процедуру трейлинга. Тестирую на одном дне. В журнал сообщений почти всегда выходит время после 23:00. Изредка часть тиков показывает 18:00, а остальную после 23:00. Что я делаю не так?как мне вывести время, чтобы понять на каком участке дня мой трейлинг-стоп не срабатывает? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти