Romhacker Опубликовано 6 июля, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 июля, 2013 кстати, почему у меня нет пересечение..,? В условиях я указал "if(iMA1 >= iMA2 && iMA3 > iMA2 && CountBuy() == 0)" ---- если быстрая МА больше или ровнос средней МА а так же тяжелая МА больше средней МА и нет покупок - то покупка.... условия на продажу противоположные. Или я неправильно условия создал? Это не пересечение.Пересечение - это когда быстра машка в один момент времени были ниже медленной, а вдругой момент выше.Вот смотри код на примере двух машек:string Signal(){ double PrevFast = iMA(Symbol(), 0, FastMA, 0, MODE_EMA, PRICE_CLOSE, 2); double CurFast = iMA(Symbol(), 0, FastMA, 0, MODE_EMA, PRICE_CLOSE, 1); double Slow = iMA(Symbol(), 0, SlowMA, 0, MODE_EMA, PRICE_CLOSE, 1); if (PrevFast Slow) return("Buy"); if (PrevFast > Slow && CurFast return("No Signal");}Добавлено: 06-07-2013 16:33:48Так точнее:string Signal(){ double PrevFast = iMA(Symbol(), 0, FastMA, 0, MODE_EMA, PRICE_CLOSE, 2); double CurFast = iMA(Symbol(), 0, FastMA, 0, MODE_EMA, PRICE_CLOSE, 1); double CurSlow = iMA(Symbol(), 0, SlowMA, 0, MODE_EMA, PRICE_CLOSE, 1); double PrevSlow = iMA(Symbol(), 0, SlowMA, 0, MODE_EMA, PRICE_CLOSE, 2); if (PrevFast CurSlow) return("Buy"); if (PrevFast > PrevSlow && CurFast return("No Signal");} Изменено 6 июля, 2013 пользователем Romhacker Ссылка на сообщение Поделиться на другие сайты More sharing options...
samuliak Опубликовано 6 июля, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 июля, 2013 кстати, почему у меня нет пересечение..,? В условиях я указал "if(iMA1 >= iMA2 && iMA3 > iMA2 && CountBuy() == 0)" ---- если быстрая МА больше или ровнос средней МА а так же тяжелая МА больше средней МА и нет покупок - то покупка.... условия на продажу противоположные. Или я неправильно условия создал? Это не пересечение.Пересечение - это когда быстра машка в один момент времени были ниже медленной, а вдругой момент выше.Вот смотри код на примере двух машек:string Signal(){ double PrevFast = iMA(Symbol(), 0, FastMA, 0, MODE_EMA, PRICE_CLOSE, 2); double CurFast = iMA(Symbol(), 0, FastMA, 0, MODE_EMA, PRICE_CLOSE, 1); double Slow = iMA(Symbol(), 0, SlowMA, 0, MODE_EMA, PRICE_CLOSE, 1); if (PrevFast Slow) return("Buy"); if (PrevFast > Slow && CurFast return("No Signal");}Добавлено: 06-07-2013 16:33:48Так точнее:string Signal(){ double PrevFast = iMA(Symbol(), 0, FastMA, 0, MODE_EMA, PRICE_CLOSE, 2); double CurFast = iMA(Symbol(), 0, FastMA, 0, MODE_EMA, PRICE_CLOSE, 1); double CurSlow = iMA(Symbol(), 0, SlowMA, 0, MODE_EMA, PRICE_CLOSE, 1); double PrevSlow = iMA(Symbol(), 0, SlowMA, 0, MODE_EMA, PRICE_CLOSE, 2); if (PrevFast CurSlow) return("Buy"); if (PrevFast > PrevSlow && CurFast return("No Signal");} Большое спасибо!! Я немного переделал сову и добавил функцию закрытие ордеров при противоположном сигнале. Уже все хорошо)) Плюсую!*******************Еще один вопрос:как в советник добавить осциллятор? Добавить функции одно, но я не знаю, как записать их. Например тогда, когда МАКД пересекает нулевую линию сверху вниз - продажа. Или когда осциллятор Вильямса АО меняет цвет на красный - продажа. Как вставлять такие функции? Просто в уроке не говорят, как создавать совы на основе осцилляторов. С уважением! 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Romhacker Опубликовано 6 июля, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 июля, 2013 Еще один вопрос:как в советник добавить осциллятор? Добавить функции одно, но я не знаю, как записать их. Например тогда, когда МАКД пересекает нулевую линию сверху вниз - продажа. Или когда осциллятор Вильямса АО меняет цвет на красный - продажа. Как вставлять такие функции? Просто в уроке не говорят, как создавать совы на основе осцилляторов. С уважением! Ну это читать надо, как использовать индикаторы.Например здесь _http://docs.mql4.com/ru/indicatorsИли гугле поищи. Я раньше искал советники с исходниками и там смотрел, как используются нужные мне индикаторы.Вот например как выглядит вызов функции AO:double val=iAO(NULL, 0, 2);Насколько я понял, если значение АО на анализируемом баре больше, чем на предыдущем, то индикатор рисует зелёный бар, если меньше, то красный.Соответствено функция может выглядеть так:string SignalAO(){ double CurAO = iAO(NULL, 0, 1); double PrevAO = iAO(NULL, 0, 2); if(CurAO > PrevAO) return("Buy"); if(CurAO return("No Signal");} Ссылка на сообщение Поделиться на другие сайты More sharing options...
samuliak Опубликовано 7 июля, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 июля, 2013 А как вставить в советник функцию при появлении противоположного сигнала закрыть все ордера ? :( Я знаю, как сделать, что бы сделки закрывались при противоположном сигнале. Вот смотри:Сначала пишешь переименую с функцией тру или фолс Цитата extern bool CloseRevers = true; Потом где то внизу кода вычисляешь переименую, то есть - даешь ей функцию. ( не знаю, как правильно это сформулировать), смотри: Цитата void CLOSEORDER(int ord){ for (int i=0; i { if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if (OrderSymbol()==Symbol() && OrderMagicNumber()==123) { if (OrderType()==OP_BUY && ord==OP_BUY) OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),3,CLR_NONE); if (OrderType()==OP_SELL && ord==OP_SELL) OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),3,CLR_NONE); } } }}//-------------------------------------------------------------------- Вот например функция открытие сделки : Цитата if(MA10>MA20 && MA11MA3 && CountBuy() { TP = NormalizeDouble(Ask + TakeProfit * Point, Digits); SL = NormalizeDouble(Ask - StopLoss * Point, Digits); ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 5, 0, 0, "123", Magic, 0, Blue); if(ticket > 0) { if (CloseRevers) CLOSEORDER(OP_SELL); if (OrdersTotal()==0) if(OrderSelect(ticket, SELECT_BY_TICKET) == true) OrderModify(ticket, OrderOpenPrice(), SL, TP, 0, Black); } } Посмотри внимательно, в инструкции видно, что перед тем, как модифицировать сделку, проверяет, нет ли противоположного сигнала. Если есть - сделка закрывается. как то так. Вот код, который, который вызывает функцию проверки нет ли противоположного сигнала и нужно ли закрыть сделку: Цитата if (CloseRevers) CLOSEORDER(OP_SELL); if (OrdersTotal()==0) Код ставишь тогда, когда в инструкции сделка уже открыта. Так как это идет, как модификация.Я новичок в мкл4. Если что то не выходит - пиши, разберем!Добавлено: 07-07-2013 14:13:02Люди, помогите. Не подскажите, как добавить трейлинг стоп в советник????? Очень нужно....!Написать саму функцию смогу, но не знаю как её вставить в инструкцию....Добавлено: 07-07-2013 14:41:18И еще один вопрос: очень важный!как добавить еще одну функцию открытие сделки?? Например, что бы еще открывалась сделка на отбой от тяжелой машки. тяжелая машка есть, только как указать условия на отбой? Буду очень благодарен! Изменено 7 июля, 2013 пользователем samuliak Ссылка на сообщение Поделиться на другие сайты More sharing options...
Vorchunozavr Опубликовано 7 июля, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 июля, 2013 Всем привет!xbms, спасибо огромное за уроки!samuliak Цитата Не подскажите, как добавить трейлинг стоп в советник????? Я к третьему уроку добавил ступенчатый трал. Вписать можно и вначале, если есть открытые ордера - тралим. Цитата if (CountSell() > 0 || CountBuy() > 0) Tral(); Выписать отбой от машки - имхо, можно используя свечные функции iOpen(), iClose() и т.д.Test_0003.mq4 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
samuliak Опубликовано 8 июля, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 июля, 2013 Всем привет!xbms, спасибо огромное за уроки!samuliak Цитата Не подскажите, как добавить трейлинг стоп в советник????? Я к третьему уроку добавил ступенчатый трал. Вписать можно и вначале, если есть открытые ордера - тралим. Цитата if (CountSell() > 0 || CountBuy() > 0) Tral(); Выписать отбой от машки - имхо, можно используя свечные функции iOpen(), iClose() и т.д. не подскажите, как это можно сделать? Большое спасибо! Ссылка на сообщение Поделиться на другие сайты More sharing options...
Xoz Опубликовано 8 июля, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 июля, 2013 При компиляции выдает три ошибки как их исправить не знаю. Есле комуто не трудно Исправте пожайлуста. Я только учусь. За рание спасибо.extern double Lots = 0.1;extern int TakeProfit = 50;extern int Step = 50;extern double Multiplier = 2;extern int Slippage = 5;extern int Magic = 123;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, Blue); 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 = FindLastLots(OP_BUY); lastlot = NormalizeDouble(lastlot * Multiplier, 2); ticket = OrderSend(Symbol(),OP_BUY,lastlot,Ask,Slippage,0,0,"",Magic,0,Blue); if (ticket > 0) ModifyOrders(OP_BUY); } } else if (order_type == OP_SELL) { price = FindLastPrice(OP_SELL); if (Bid { lastlot = FindLastLots(OP_SELL); lastlot = NormalizeDouble(lastlot * Multiplier, 2); ticket = OrderSend(Symbol(),OP_SELL,lastlot,Bid,Slippage,0,0,"",Magic,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); }//+------------------------------------------------------------------+ Ссылка на сообщение Поделиться на другие сайты More sharing options...
nicholas Опубликовано 8 июля, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 июля, 2013 2 ошибки компиляции:1. в функции void ModifyOrders(int otype)double avgprice = 0; order_lots = 0;Нужно ставить после первой переменной запятую а не точку с запятой double avgprice = 0, order_lots = 0;или добавлять тип для order_lotsdouble avgprice = 0;double order_lots = 0;2. в функции int CountTrades()строчка if (OrderSymbol() == Symbol && OrderMagicNumber() == Magic)Symbol это функция, поэтому необходимо добавлять скобки Symbol(), что-бы компилятор знал что именно вызов функцииисправленная строка if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)Логические ошибки программы я не проверял, только ошибки компиляции. Ссылка на сообщение Поделиться на другие сайты More sharing options...
00000 Опубликовано 8 июля, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 июля, 2013 3. 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);}4. Грамматическая ""При компиляции выдает три ошибки как их исправить не знаю. Если кому-то не трудно Исправьте пожалуйста. Я только учусь. Заранее спасибо."" ;;) Изменено 8 июля, 2013 пользователем 00000 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Vorchunozavr Опубликовано 8 июля, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 июля, 2013 samuliak, сорри, я как писатель - не очень (решил попробовать после первого урока от Сергея) Прям моя любимая фраза: Цитата Киса, я хочу вас спросить, как художник — художника: вы рисовать умеете? Так что, код я долго рожать буду. Да и со временем не очень.В теории всё просто... Если цена под машкой, значит идёт отбиваться снизу ;). Нам нужен коридор +- 10пп от МА, заходит - продаём, пролетает - стоп (или переворот, или лок). Можно выставить SellStop на нижней границе, если цена в коридоре...Для покупки, наоборот.PS. Мой Мартин:Test_0004_Martin.mq4 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
samuliak Опубликовано 9 июля, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 июля, 2013 samuliak, сорри, я как писатель - не очень (решил попробовать после первого урока от Сергея) Прям моя любимая фраза: Цитата Киса, я хочу вас спросить, как художник — художника: вы рисовать умеете? Так что, код я долго рожать буду. Да и со временем не очень.В теории всё просто... Если цена под машкой, значит идёт отбиваться снизу ;). Нам нужен коридор +- 10пп от МА, заходит - продаём, пролетает - стоп (или переворот, или лок). Можно выставить SellStop на нижней границе, если цена в коридоре...Для покупки, наоборот.PS. Мой Мартин: Большое спасибо. Но у меня пока что другая ситуация. Сам себе придумываю легкие совы и пишу их. Вот уже часть сделал , но наткнулся на одну проблему. Например у меня уже есть условие на покупку и на продажу, можно ли добавить еще отдельные условие, что бы сделка открывалась еще по ним. Вот например, как я думаю это сделать, но не очень выходит.... Цитата if(здесь условие на покупку) { (а здесь инструкция по их исполнению) }else if(другие условие на покупку) { (инструкция по исполнению других условий на покупку) } И НИЖЕ ТАК ЖЕ НА ПРОДАЖУ: Цитата if(здесь условие на продажу) { (а здесь инструкция по их исполнению) }else if(другие условие на продажу) { (инструкция по исполнению других условий на продажу) } через функцию else получится или нет? В первым условиях и инструкциях у меня прописано, что бы сделка открывалась при пересечении машек в сторону тяжелой машке. Хочу добавить еще одно отдельное условие, что при отбитие от тяжелой МА ставилась отложка. Ну вот не получается пока что. Не знаю ,где написать условие. Условие на покупку и продажу у меня такие: Цитата if(High[0] >= MA3 && CountSellStop() { (инструкция на отложку продажу);}if(Low[0] { (инструкция на отложку покупку);} Изменено 9 июля, 2013 пользователем samuliak Ссылка на сообщение Поделиться на другие сайты More sharing options...
Vorchunozavr Опубликовано 9 июля, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 июля, 2013 samuliak Цитата через функцию else получится или нет? Да. Именно для этого else и существует. Цитата if(High[0] >= MA3 && CountSellStop() High[0] - хай текущего бара. Я бы написал так: Цитата if(Bid >= MA3 && CountSellStop() А так мы узнаем, что цена пришла снизу... Цитата if(Bid >= MA3 && High[2] Ссылка на сообщение Поделиться на другие сайты More sharing options...
samuliak Опубликовано 9 июля, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 июля, 2013 samuliak Цитата через функцию else получится или нет? Да. Именно для этого else и существует. Цитата if(High[0] >= MA3 && CountSellStop() High[0] - хай текущего бара. Я бы написал так: Цитата if(Bid >= MA3 && CountSellStop() А так мы узнаем, что цена пришла снизу... Цитата if(Bid >= MA3 && High[2] гм....логично...)))большое спасибо, сейчас буду смотреть. Еще если не тяжело, можете сказать, как использовать исциплятор в советнике?? Я не могу его прикрутить.Добавлено: 09-07-2013 12:50:31Всем гуру, у меня возникла проблема.Пишу советник на основе машек (пока что, буду дополнять его). В советнике 3 условия на входа в сделку: - if(MA10>MA20 && MA11MA3 && CountBuy() - else if(Ask MA3 && High[1] > MA3 && CountBuyStop() - else if(Ask MA3 && High[1] > MA3 && CountSellLimit() Смысл тот, что стоповые и лимитные сделки не ставятся на на заданное количество пунктов. Я указал переменную PipStop, но все равно не выходит. Прикрепляю советник, прошу помочь мне, что бы сделки открывались точно на заданное количество пунктов после выполнение условий. Плюс у меня за много сделок открывает, не могу это исправить. Помогите мне в моих ошибках. буду очень благодарен!*******************Кстати, было бы отлично, если бы следующие урок был о том, как писать функции, которые нужны для советников. Например, расчет лота, ММ, закрытие позиции по обратному сигналу или частичное закрытие, трейлинг и так дальше. Просто в инете много инфы, но непонятно. Когда смотришь видео Сергея, он более точно показывает и лучше воспринимается информация. Буду очень благодарен!машки_1.mq4 Изменено 9 июля, 2013 пользователем samuliak Ссылка на сообщение Поделиться на другие сайты More sharing options...
Vorchunozavr Опубликовано 9 июля, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 июля, 2013 samuliak, с осциллятором пока не помогу.Лимитники не ставяться, потому что PipStop не прикручен к TP и SL.Lots *= 10 - это тоже вроде лишнее. Изменено 9 июля, 2013 пользователем Vorchunozavr Ссылка на сообщение Поделиться на другие сайты More sharing options...
samuliak Опубликовано 9 июля, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 июля, 2013 samuliak, с осциллятором пока не помогу.Лимитники не ставяться, потому что PipStop не прикручен к TP и SL.Lots *= 10 - это тоже вроде лишнее. еще раз большое спасибо. С лимитника я разобрался, уже вроде все понял. Ну вот только у меня в тестере никак не открываются продажные сделки. Ни селл стоп ли селл. Только покупки. Посмотрите в код и скажите, кто может, с чем это связано?машки_1.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Dimasyok Опубликовано 10 июля, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 июля, 2013 samuliak, с осциллятором пока не помогу.Лимитники не ставяться, потому что PipStop не прикручен к TP и SL.Lots *= 10 - это тоже вроде лишнее. еще раз большое спасибо. С лимитника я разобрался, уже вроде все понял. Ну вот только у меня в тестере никак не открываются продажные сделки. Ни селл стоп ли селл. Только покупки. Посмотрите в код и скажите, кто может, с чем это связано? Во-первых, тебе уже говорили что умножение лота на 10 ни к чему, убери его нафиг.Во-вторых у тебя стопы на продажу стоят не правильно, тейкпрофит получается выше открытия, СЛ ниже, по-ходу с покупок скопировал но не поменял знаки.По отложенным ордерам на селл, тоже скопировал с покупок, условие не поменял, внимательнее просмотри.NormalizeDouble(Bid - PipStop * Point, Digits) - это лучше вынести отдельной строкой, подписать его как OpenPrice например и вписывать в OrderSend, а не тупо всю функцию тулить в OrderSendИ еще условия у тебя не очень понятны... MA10MA21, чтоб младшая машка была выше... я не пойму логики честно говоря. MA20 else if(Ask MA3 && High[1] > MA3 && CountSellStop() else if(Bid >= MA3 && High[2] Зачем делаешь кучу условий на отложки... Вообщем работать надо на совой и работать... Изменено 10 июля, 2013 пользователем Dimasyok Ссылка на сообщение Поделиться на другие сайты More sharing options...
samuliak Опубликовано 10 июля, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 июля, 2013 samuliak, с осциллятором пока не помогу.Лимитники не ставяться, потому что PipStop не прикручен к TP и SL.Lots *= 10 - это тоже вроде лишнее. еще раз большое спасибо. С лимитника я разобрался, уже вроде все понял. Ну вот только у меня в тестере никак не открываются продажные сделки. Ни селл стоп ли селл. Только покупки. Посмотрите в код и скажите, кто может, с чем это связано? Во-первых, тебе уже говорили что умножение лота на 10 ни к чему, убери его нафиг.Во-вторых у тебя стопы на продажу стоят не правильно, тейкпрофит получается выше открытия, СЛ ниже, по-ходу с покупок скопировал но не поменял знаки.По отложенным ордерам на селл, тоже скопировал с покупок, условие не поменял, внимательнее просмотри.NormalizeDouble(Bid - PipStop * Point, Digits) - это лучше вынести отдельной строкой, подписать его как OpenPrice например и вписывать в OrderSend, а не тупо всю функцию тулить в OrderSendИ еще условия у тебя не очень понятны... MA10MA21, чтоб младшая машка была выше... я не пойму логики честно говоря. MA20 else if(Ask MA3 && High[1] > MA3 && CountSellStop() else if(Bid >= MA3 && High[2] Зачем делаешь кучу условий на отложки... Вообщем работать надо на совой и работать... Мне кто то на форуме РуФорум писал, что условие для пересечение МА пишется так.... может наврали)Вчера я над кодом посмотрел и много чего изменил. Там, где одинаковые условие - выкинул. Просто сделал, что бы при выполнение условий ставились 2 отложки на пробой и отбой. Кстати, не в курсе как сделать, что бы в конце дня несработаные сделки удалялись? Ссылка на сообщение Поделиться на другие сайты More sharing options...
xbms Опубликовано 10 июля, 2013 Автор Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 июля, 2013 Цитата Кстати, не в курсе как сделать, что бы в конце дня несработаные сделки удалялись? достаточно просто, проверить время, ну как минимум час:if (TimeHour(TimeCurrent()) == 0) CloseAllOrders(); // тут Ваша функция закрытия ордеров Таким образом в ноль часов будут закрыты все ордера... 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
samuliak Опубликовано 10 июля, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 июля, 2013 Цитата Кстати, не в курсе как сделать, что бы в конце дня несработаные сделки удалялись? достаточно просто, проверить время, ну как минимум час:if (TimeHour(TimeCurrent()) == 0) CloseAllOrders(); // тут Ваша функция закрытия ордеров Таким образом в ноль часов будут закрыты все ордера... Тогда нужно написать еще функцию CloseAllOrders()....блин) Ссылка на сообщение Поделиться на другие сайты More sharing options...
Romhacker Опубликовано 10 июля, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 июля, 2013 Цитата Кстати, не в курсе как сделать, что бы в конце дня несработаные сделки удалялись? достаточно просто, проверить время, ну как минимум час:if (TimeHour(TimeCurrent()) == 0) CloseAllOrders(); // тут Ваша функция закрытия ордеров Таким образом в ноль часов будут закрыты все ордера... Правильнее будет назвать функцию ClosePendingOrders. Ссылка на сообщение Поделиться на другие сайты More sharing options...
bizforex Опубликовано 10 июля, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 10 июля, 2013 Столкнулся с проблемой, сов работает в окне м5, для реализации стратегии использует данные индикатора с ТФ h1, так если при тестировании наложить на график этот индюк, то видно что данные поступающие в сов с индюка разнятся с налаженным. Различие в работе двух индюшат хорошо видно после окончания тестирования. В примере ниже расхождения не значительные, но они есть, почему? 111.jpg Ссылка на сообщение Поделиться на другие сайты More sharing options...
Шамиль Опубликовано 11 июля, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 июля, 2013 XBMS привет в очередной раз. Конечно , не надеюсь получить положительное одобрение с твоей стороны , но , есть пожелание следующего урока по созданию индикатора Зиг Заг. В иннете много сказанно о нем и я даже начал писать советник по нему. Но урока не нашел ((( Положительная перспектива. Но сам индюк иногда дает сбои , глючит и это вызывает у меня сомнения в его надежности во-времени. Индюка я подобрал естественно не своего, по какому принципу он рассчитывает точки Хай и Лоу, а главное их фильтрует - непонятно. Если бы Ты провел урок по написанию индикатора Зиг Заг , я думаю всем было бы полезно ! Я прикреплю его к письму , для наглядности. У него особое отличие от других, он выдает с начало все хай , а потом лоу , поэтому по нему легко отследить максимальные и минимальные сигналы. Спасибо. AlexSTAL_ZigZagProfExtra.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
ar7319 Опубликовано 12 июля, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 июля, 2013 Всем здравствуйте!По поводу сова на внешнем индикаторе ТМА.Почему-то открывает только одну сделку. При закрытии ордера по TP, SL, или у противоположной границы -- далее тишина. При компиляции, перезагрузке терминала или если залезть в св-ва эксперта -- все по новому: открывает, сопровождает, закрывает (ся) ордер, и опять тишина. Например у верхней границы сов поставил SELL. Но цена ушла вверх и сработал SL. Все, ордеров нет, цена выше PriceHigh канала, т.е. условия для открытия нового SELL. А этого не происходит. В чем может быть проблема? При компиляции ошибок нет, в журнале тоже.На скрине: ордер, обведенный кружочком, сов открыл сам, но при повторной компиляции, когда я увидел, что цена вышла за пределы канала, а советник молчит. 123.JPGTest_TMA.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
bizforex Опубликовано 12 июля, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 июля, 2013 Всем здравствуйте!По поводу сова на внешнем индикаторе ТМА.Почему-то открывает только одну сделку. При закрытии ордера по TP, SL, или у противоположной границы -- далее тишина. При компиляции, перезагрузке терминала или если залезть в св-ва эксперта -- все по новому: открывает, сопровождает, закрывает (ся) ордер, и опять тишина. Например у верхней границы сов поставил SELL. Но цена ушла вверх и сработал SL. Все, ордеров нет, цена выше PriceHigh канала, т.е. условия для открытия нового SELL. А этого не происходит. В чем может быть проблема? При компиляции ошибок нет, в журнале тоже.На скрине: ордер, обведенный кружочком, сов открыл сам, но при повторной компиляции, когда я увидел, что цена вышла за пределы канала, а советник молчит. нет обнуления переменной количества ордеров после закрытия. Ссылка на сообщение Поделиться на другие сайты More sharing options...
ar7319 Опубликовано 12 июля, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 июля, 2013 Всем здравствуйте!По поводу сова на внешнем индикаторе ТМА.Почему-то открывает только одну сделку. При закрытии ордера по TP, SL, или у противоположной границы -- далее тишина. При компиляции, перезагрузке терминала или если залезть в св-ва эксперта -- все по новому: открывает, сопровождает, закрывает (ся) ордер, и опять тишина. Например у верхней границы сов поставил SELL. Но цена ушла вверх и сработал SL. Все, ордеров нет, цена выше PriceHigh канала, т.е. условия для открытия нового SELL. А этого не происходит. В чем может быть проблема? При компиляции ошибок нет, в журнале тоже.На скрине: ордер, обведенный кружочком, сов открыл сам, но при повторной компиляции, когда я увидел, что цена вышла за пределы канала, а советник молчит. нет обнуления переменной количества ордеров после закрытия. То есть после закрытия ордера переменная count должна быть равной 0?И как это грамотно прописать в коде? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти