Rusand Опубликовано 18 декабря, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 18 декабря, 2013 Вопросы от новичка. Какой смысл в параметре Slippage в отложенных ордерах? В чем отличие его работы от рыночных ордеров? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Сast Опубликовано 18 декабря, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 18 декабря, 2013 И ещё, уже долго до меня не дойдёт, как сделать так чтобы открывался только один ордер при заданном условии и при закрытии по тейку не открывался ещё один, так как условие всё ещё соблюдено. То есть, на примере советника, если цена выше скользящей средней - открывается ордер на покупку и закрывается по тейку, ну или стопу, а следующий ордер должен быть только на продажу, и не важно закрылся он по SL || TP. Просмотрев уроки учителя, открыв MetaEditor, написал (напечатал), НО, во-первых ордера на покупку открываются ниже мувингапри условии Ask>MA, ну и во-вторых за ордером BUY и последующим его закрытием открывается BUY. Кому не сложно посмотрите, укажите на ошибки. OneOrder.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Vorchunozavr Опубликовано 18 декабря, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 18 декабря, 2013 Спойлер И ещё, уже долго до меня не дойдёт, как сделать так чтобы открывался только один ордер при заданном условии и при закрытии по тейку не открывался ещё один, так как условие всё ещё соблюдено. То есть, на примере советника, если цена выше скользящей средней - открывается ордер на покупку и закрывается по тейку, ну или стопу, а следующий ордер должен быть только на продажу, и не важно закрылся он по SL || TP. Просмотрев уроки учителя, открыв MetaEditor, написал (напечатал), НО, во-первых ордера на покупку открываются ниже мувингапри условии Ask>MA, ну и во-вторых за ордером BUY и последующим его закрытием открывается BUY. Кому не сложно посмотрите, укажите на ошибки. Для начала:int MA = iMA(Symbol(),0,200,0,MODE_EMA,PRICE_CLOSE,0); Переменная MA, должна быть объявлена как double. Ваша МА, в лучшем случае, выдаёт 1. Также, я бы написал Bid>MA, вместо Ask>MA (но это неприципиально). Не лепите скобки на один уровень, сделайте как у xbms - ступеньками. Похоже sell советник не открывает - не на месте закрывающая скобка... . Slippage, на рыночных, не ставьте 0.Команда start срабатывает на каждом тике. Исходя из этого и печатать надо: => если ордеров нет => если последний ордер был Бай, значит ждём сигнал на Селл => если последний был Селл, значит ждём сигнал на Бай...RusandНет смысла. Пишите 0. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Сast Опубликовано 19 декабря, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 декабря, 2013 ни чё у меня не получается...Vorchunozavr, покажите мне как это в коде надо записать Ссылка на сообщение Поделиться на другие сайты More sharing options...
Baggins Опубликовано 19 декабря, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 декабря, 2013 ни чё у меня не получается...Vorchunozavr, покажите мне как это в коде надо записать Столько раз в уроках пережевано было: и пересчет ордеров, и нужные параметры в них. При пересчете от конца находишь нужный ордер, сравниваешь время открытия со временем настоящим. Если разные, то возвращаешь true, как сигнал к торговле. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Сast Опубликовано 19 декабря, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 декабря, 2013 Baggins , не...Добавлено: 19-12-2013 17:32:51Мне кто нибудь поможет сделать то, что я каждыми днями пытаюсь сделать? То что удалось сделать, так это изменить немного функцию выборки закрытых ордеров, добавил переменную oldticket которая сравнивается с последним тикетом, и забирает у последнего ордера тип, и переменной type присвоил значение OrderType()+1, что бы переменная была или 1 или 2 в зависимости от типа закрытого ордера. Добавил в условия и чуда не произошло, но уже более менее похоже на истину. Скажите что ж надо ещё туда вписать, чтобы всё заработало?OneOrder.mq4 Изменено 19 декабря, 2013 пользователем Сast Ссылка на сообщение Поделиться на другие сайты More sharing options...
Vorchunozavr Опубликовано 19 декабря, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 декабря, 2013 Мне кто нибудь поможет сделать то, что я каждыми днями пытаюсь сделать? Уж и помогать особо нечего...Просто МА считается, только если if (Count() == 0 && order_type == 0), считать нужно или вне условий, или после каждого. Я, почему ступеньками советовал - так виднее... ;).Ещё, при отсутствии стопа, ордер может висеть долго.Переменная ticket, объявлена на глобальном уровне, в функции лучше её не использовать. Ссылка на сообщение Поделиться на другие сайты More sharing options...
denis77515 Опубликовано 2 января, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 января, 2014 Доброго времени вам господа программисты. всех С Новым 2014 Годом.В общем интересует что б кто то посмотрел код. А то сомнение берет правильно ли я написал без убыток и трелинг в нем. Задумка была токова,когда по мартину открываются доливочные ордера,то вычисляем общий без убыток,ставим стоп лосс и потом тралим. Test_22.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
samuliak Опубликовано 3 января, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 января, 2014 Всех с Новым Годом!! Программисты, помогите с совой. Ошибка со скобками, что там не так?? Вроде же все верно писал... VaiL.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
denis77515 Опубликовано 3 января, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 января, 2014 samuliak ,Я то же не специалист,только учусь,но внимательно посмотри видео уроки,постарайся вникнуть хоть не много.Там в первом уроке есть такая фишка как можно использовать за место калькулятора.еще на сайте MQL4 там написанно что такое константы ,переменные и все такое,что к чему присваевается. Я по началу то же тупо списал.Посмотри код сравни со своим,должен понять где ошибки. VaiL.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
samuliak Опубликовано 3 января, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 января, 2014 У вас немного другая сова, я когда то так же её писал. А меня интересует что именно в моей неправильно. И никак не могу найти ошибку.( Ссылка на сообщение Поделиться на другие сайты More sharing options...
denis77515 Опубликовано 3 января, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 января, 2014 Скажу словами господина xbms Очень настоятельно рекомендую просмотреть вводные видео уроки.иначе совсем не чего не поймете. Vail_2.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Trader7777 Опубликовано 4 января, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 января, 2014 xbms, посмотрите пожалуйста функции на наличие ошибок ( они там похоже точно есть)суть первой функции в поиске лота, который необходим для покрытия убытка за TP пунктов в случае закрытия сетки ордеров.вторая функция должна закрывать половину сетки начиная с самого старшего ордераdouble FindRightLot (int otype) // функция поиска лота, необходимого для выхода из просадки после //закрытия сетки ордеров{ double Lot=0; double TotalLot=0; for (int i = OrdersTotal()-1; i>0; i--) { if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES)) { if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType() == otype) { if (otype == OP_BUY) { Lot = NormalizeDouble ((OrderOpenPrice()-Bid)*OrderLots()/TP,2); if (Lot>0) { TotalLot= NormalizeDouble (TotalLot+Lot,2); } } else if (otype == OP_SELL) { Lot = NormalizeDouble ((Ask-OrderOpenPrice())*OrderLots()/TP,2); if (Lot>0) { TotalLot= NormalizeDouble (TotalLot+Lot,2); } } } } } return (TotalLot); }//+------------------------------------------------------------------+void CloseHalfOrders (int otype)// ф-ция закрытия половины ордеров сетки{ int count = 0; for (int i = 0; i { if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES)) { if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType() == otype) { if (otype == OP_BUY) { if (count3 ) OrderClose(OrderTicket(),OrderLots(),Bid,0,Black); count++; } else if (otype == OP_SELL) { if (count3) OrderClose(OrderTicket(),OrderLots(),Ask,0,Black); count++; } } } } } Ссылка на сообщение Поделиться на другие сайты More sharing options...
denis77515 Опубликовано 5 января, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 января, 2014 Доброго времени вам господа программисты. всех С Новым 2014 Годом.В общем интересует что б кто то посмотрел код. А то сомнение берет правильно ли я написал без убыток и трелинг в нем. Задумка была токова,когда по мартину открываются доливочные ордера,то вычисляем общий без убыток,ставим стоп лосс и потом тралим. Привет всем,что не кто не подскажет по поводу моей просьбы ? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Nart60 Опубликовано 5 января, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 января, 2014 Здравствуйте всем! С Новым 2014 годом вас! У меня вопрос возник. Дело в том. что после загрузки и установки не открывается видеоролик ("MQL4 Программирование" курс молодого бойца" и др). Выдает сообщение "Нет приложения, связанного с данным расширением файла". Подскажите, пожалуйста, что это означает и что мне следует предпринять для устранения этой проблемы. Заранее спасибо! Изменено 5 января, 2014 пользователем Nart60 Ссылка на сообщение Поделиться на другие сайты More sharing options...
JR Опубликовано 10 января, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 января, 2014 Сорри за нубский вопрос, но что-то я не разобрался, а с одного чарта нельзя в эксперте открывать явно ордера по другим инструментам?Т.е. если я запускаю сову на EURUSD, а в коде написано:OrderSend("USDJPY", OP_SELL, ....ну и так далее), то... ничего не происходит. В логе тоже пусто.UPD: Разобрался сам: нужно было в качестве параметра цены передавать MarketInfo по инструменту. Изменено 10 января, 2014 пользователем JR Ссылка на сообщение Поделиться на другие сайты More sharing options...
AndreyP Опубликовано 12 января, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 января, 2014 Люди добрые подскажите: мне нужно определить профит последнего закрытого ордера и его тип,а так же последний лот .Накидал вот такие функции но,что не работаетdouble CountProfitHystory(){ int profit = 0; for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)==false) { Print("Error in history!"); break; } if(OrderSymbol() != Symbol() && OrderMagicNumber() != Magic)continue; profit=OrderProfit(); } return(profit);}2) int FindLastOrderType(){ for(int i = OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) return(OrderType()); } } return(-1);}3) double FindLastLots(int otype){ double oldLots; int oldticket; ticket = 0; for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype) { oldticket = OrderTicket(); if(oldticket > ticket) { oldLots = OrderLots(); ticket = oldticket; } } } } return(oldLots);} Добавлено: 12-01-2014 10:15:23Спасибо товарищи за помощь,она была неоценимой :dВыкладываю исправленную версию,авось кому пригодится \M/int CountProfitHystory(){ double profit = 0; int i,accTotal=OrdersHistoryTotal(); for( i=0;i { if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)==true) {if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) profit=OrderProfit(); } } return(profit);}2) //+------------------------------------------------------------------+double FindLastLots(int otype){ double oldLots; int oldticket; ticket = 0; for(int i=OrdersHistoryTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype) { oldticket = OrderTicket(); if(oldticket > ticket) { oldLots = OrderLots(); ticket = oldticket; } } } } return(oldLots);} //+------------------------------------------------------------------+int FindLastOrderType(){ for(int i = OrdersHistoryTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) return(OrderType()); } } return(-1);} Изменено 12 января, 2014 пользователем AndreyP Ссылка на сообщение Поделиться на другие сайты More sharing options...
Nafanja Опубликовано 12 января, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 января, 2014 к уроку - Пишем советник на мартингейлеСразу извиняюсь если эта тема уже освещалась (не нашел).Писал советник под-диктовку с урока, но вылазит куча ошибок.Сразу отвечу, что предварительные уроки смотрел.Прошел несколько раз по коду параллельно с прокруткой видео ...Возможно сказывается полное отсутствие опыта программирования.(Почему то, мне нельзя засунуть текст кода ни в поле КОДА, ни в поле СПОЙЛЕРА. Так, что извиняюсь...)Привожу код, который писал под-диктовку:=================================================================================extern double Lots = 0.1; extern int TakeProfit = 50; extern int Step = 50; extern double Multiplier = 2;extern int Slippage = 5;extern int Magic = 333;int ticket;double price, TP, lastlot;//+------------------------------------------------------------------+//| expert initialization function |//+------------------------------------------------------------------+int init(){ if (Digits == 3 || Digits == 5) { TakeProfit *= 10; Step *= 10; Slippage *= 10; } return(0);}//+------------------------------------------------------------------+//| expert deinitialization function |//+------------------------------------------------------------------+int deinit(){ return(0);}//+------------------------------------------------------------------+//| expert start function |//+------------------------------------------------------------------+int start(){ if (CountTrades() == 0) { double ima = iMA(Symbol(), PERIOD_H1, 14, 0, MODE_SMA, PRICE_CLOSE, 1); if (Ask > ima) { ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "", Magic, 0, Green); if (ticket > 0) { TP = NormalizeDouble(Ask + TakeProfit * Point, Digits); OrderModify(ticket, OrderOpenPrice(), 0, TP, 0); } } else if(Bid { ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "", Magic, 0, Red); if (ticket > 0) { TP = NormalizeDouble(Bid - TakeProfit * Point, Digits); OrderModify(ticket, OrderOpenPrice(), 0, TP, 0); } } } else { int order_type = FindLastOrderType(); { if (order_type == OP_BUY) { price = FindLastPrice(OP_BUY); if(Ask { lastlot = FindLaslLots(OP_BUY); lastlot = NormalizeDouble(lastlot * Multiplier, 2); ticket = OrderSend(Symbol(), OP_BUY, lastlot, Ask, Slippage, 0, 0, "", 0, Green); if (ticket > 0) ModifyOrders(OP_BUY); } } else if (order_type == OP_SELL) { price = FindLastPrice(OP_SELL); if(Bid { lastlot = FindLaslLots(OP_SELL); lastlot = NormalizeDouble(lastlot * Multiplier, 2); ticket = OrderSend(Symbol(), OP_SELL, lastlot, Bid, Slippage, 0, 0, "", 0, Red); if (ticket > 0) ModifyOrders(OP_SELL); } } } return(0);}//+------------------------------------------------------------------+void ModifyOrders(int otype){ double avgprice = 0, order_lots = 0; price = 0; for (int i=OrdersTotal()-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype) { price += OrderOpenPrice()*OrderLots(); order_lots += OrderLots(); } } } avgprice = NormalizeDouble(price / order_lots, Digits); if (otype == OP_BUY) TP = NormalizeDouble(avgprice + TakeProfit*Point, Digits); if (otype == OP_SELL) TP = NormalizeDouble(avgprice - TakeProfit*Point, Digits); for (i=OrdersTotal()-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype) OrderModify(OrderTicket(), OrderOpenPrice(), 0, TP, 0); } } }//+------------------------------------------------------------------+double FindLastLots(int otype){ double oldlots; int oldticket; ticket = 0; for (int i=OrdersTotal()-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype) { oldticket = OrderTicket(); if (oldticket > ticket) { oldlots = OrderLots(); ticket = oldticket; } } } } return(oldlots);}//+------------------------------------------------------------------+double FindLastPrice(int otype){ double oldopenprice; int oldticket; ticket = 0; for (int i=OrdersTotal()-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype) { oldticket = OrderTicket(); if (oldticket > ticket) { oldopenprice = OrderOpenPrice(); ticket = oldticket; } } } } return(oldopenprice);}//+------------------------------------------------------------------+int FindLastOrderType(){ for (int i=OrdersTotal()-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) return(OrderType()); } } return(-1);}//+------------------------------------------------------------------+int CountTrades(){ int count = 0; for (int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) count ++; } } return(count);}=====================================================================Пожалуйста, помогите. Изменено 12 января, 2014 пользователем Nafanja Ссылка на сообщение Поделиться на другие сайты More sharing options...
JR Опубликовано 12 января, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 января, 2014 Nafanja, проверяй код - когда такие ошибки сыпят, это скорее всего синтаксис - незакрытые(открытые) фигурные скобки и (или) непоставленные ";" - точка с запятой в конце выражений. У меня по этому уроку тоже сначала куча ошибок по компиляции была.А вот более серьезная ошибка в этом уроке, которая изначально в видео есть - неправильная проверка для доливки при SELL ордерах. Изначально в уроке так:if(Bid if (Bid >= price + Step * Point).Без этого мартышка правильно работать не будет. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Nafanja Опубликовано 13 января, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 января, 2014 Изначально в уроке так:if(Bid if (Bid >= price + Step * Point).Без этого мартышка правильно работать не будет. Спасибо за подсказку.А на счет синтаксиса - проверял раза четыре.Если конечно это не СПЕЦИАЛЬНО созданная ошибка.Потому как я пока в этом ...Ладно, буду рыть дальше Ссылка на сообщение Поделиться на другие сайты More sharing options...
mzk_3om6u Опубликовано 13 января, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 января, 2014 http://forum.mql4.com/ru/60074Ну вот, и случился бескровный переход на язык mql5. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
JR Опубликовано 16 января, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 января, 2014 Подскажите плз, каким образом лучше ограничивать бота на открытие ордеров во время быстрых движений (новости и связанные с ними каки исполнения)? Проверять размер текущей свечи? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Starker Опубликовано 16 января, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 января, 2014 Добрый день.Прошу подсказать следующую информацию:1. На каком минимальном расстоянии от Ask можно открывать ордер Buystop? Как это можно узнать программно? Я пытаюсь узнать с помощью MarketInfo(Symbol(), MODE_STOPLEVEL). Но, во-первых, значение возвращается 0, а во-вторых, я не уверен, что это именно то, про что я спрашиваю.2. Как можно сделать паузу в выполнении операции до следующего тика?Спасибо. Ссылка на сообщение Поделиться на другие сайты More sharing options...
mzk_3om6u Опубликовано 16 января, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 января, 2014 1. MODE_FREEZELEVEL константа - 33. Описание - Уровень заморозки ордеров в пунктах. Если цена исполнения находится в пределах, определяемых уровнем заморозки, то ордер не может быть модифицирован, отменен или закрыт. Вызывается через MarketInfo(Symbol(), MODE_FREEZELEVEL).2. Не корректный вопрос. После завершения функции start() программа автоматически ожидает следующий тик.Если нужно сделать внутри функции start(), то используется функция RefreshRates(). Ссылка на сообщение Поделиться на другие сайты More sharing options...
AndreyP Опубликовано 18 января, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 18 января, 2014 Здравствуйте уважаемые! Вот у меня такая вот "беда".Написал функцию подсчета максимальной просадки,но она не сохраняет значение,после закрытия ордера обнуляется почему то :d .Дак вот вопрос как сделать чтоб она все же хранила эту переменную?double MaxDrawn(){ double DrMax; double Dr=NormalizeDouble((AccountProfit()/AccountBalance())*100,2); if (DrMax DrMax=Dr; return(DrMax);} Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти