alex93 Опубликовано 7 марта, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 марта, 2014 Уважаемый xbms, очень бы хотелось посмотреть видео о создании советников, использующих стоп-лоссы, т.е. о стратегиях для советников.Спасибо Вам большое за проделанную работу)) Ссылка на сообщение Поделиться на другие сайты More sharing options...
Teo Опубликовано 7 марта, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 марта, 2014 о создании советников, использующих стоп-лоссы. Это максимально разобрано в каждом из уроков. x_x Ссылка на сообщение Поделиться на другие сайты More sharing options...
alex93 Опубликовано 7 марта, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 марта, 2014 о создании советников, использующих стоп-лоссы. Это максимально разобрано в каждом из уроков. x_x Вы не правы, стратегия у всех советников основана на принципе мартингейла. Хотелось бы послушать процесс создания стратегии без усреднения Ссылка на сообщение Поделиться на другие сайты More sharing options...
denis77515 Опубликовано 7 марта, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 марта, 2014 А вам что не понятно, как и от куда рассчитывать стоп лосс ? Мне допустим было ясно и без языка программирования.Так вот там, то же самое, в уроках есть как ставить стопы и как тралить,почти любым способом.Пересмотрите урок как добавить в советник трелинг стоп. Я думаю господин xbms не случайно взял пример написания советника на мартине или сеточник,для начинающего это довольно сложный код.там довольно в полной мере описывается логика программы.что за чем должно следовать и все вычисления.посидеть подумать можно написать простенький код без усреднения. В общем думайте,голова для этого дана,не только в нее ложку заталкивать. Ссылка на сообщение Поделиться на другие сайты More sharing options...
pavlus777 Опубликовано 16 марта, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 марта, 2014 Новый урок:http://tradelikeapro.ru/vvedenie-v-oop-klassyi/ 6 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Ilnurka Опубликовано 17 марта, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 марта, 2014 :-HДобрый день.Искал в ветке, но так и не нашел. Может кто подскажет, как модифицировать к примеру 2 ордера на разных валютах по принципу мартингейла?На одной валюте понятно, а так чтобы получить б/у по 2 парам не понятно.Спасибо за любой ответ. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Алексей7779000 Опубликовано 17 марта, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 марта, 2014 Здраствуйте, вы не могли бы мне помочь, Пишу советник, смысл в том, чтобы при прохождении цены в какую либо сторону открыть ордер в сторону движения цены. Если цена развернётся и сработает СтопЛосс, открылся новый ордер от стопа, опять по движению ценыС теми же СЛ и ТП. Первый ордер открываеться без проблем, а второе условие не срабатывает. Помогите в чём ошибка ((( Спойлер //+------------------------------------------------------------------+//| Plan B 3.mq4 |//| C |//| http:/ |//+------------------------------------------------------------------+#property copyright "C"#property link "http:/"#property version "1.00"#property strictextern double Lots = 0.1;extern int TakeProfit = 150;extern int StopLoss = 50;extern int Slippage = 5;extern string comment = "Tma Bot";extern int Magic = 12345;extern string Indi = "Данные индикатора";extern string TimeFrame = "current time frame";extern int HalfLength = 56;extern int Price = PRICE_CLOSE;extern double ATRMultiplier = 2.0;extern int ATRPeriod = 100;extern bool Interpolate = true;double PriceHigt, PriceLow, SL, TP, price;int ticket;//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+int OnInit() { if (Digits == 3 || Digits == 5) { TakeProfit *=10; StopLoss *=10; Slippage *=10; } return(INIT_SUCCEEDED); }//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+void OnDeinit(const int reason) {//--- }//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+void OnTick() { PriceHigt = iCustom(Symbol(), 0, "TMA with Distances", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 1, 0); PriceLow = iCustom(Symbol(), 0, "TMA with Distances", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 2, 0); if (Ask >= PriceHigt && CountBuy() + CountSell() == 0) { SL =NormalizeDouble(Ask - StopLoss * Point, Digits); TP =NormalizeDouble(Ask + TakeProfit * Point, Digits); ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, comment, Magic, 0, Blue); if (ticket >0) { if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES) == true) OrderModify (ticket, OrderOpenPrice(), SL, TP, 0); } } if (Bid { SL = NormalizeDouble(Bid + StopLoss * Point, Digits); TP = NormalizeDouble(Bid - TakeProfit * Point, Digits); ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, comment, Magic, 0, Blue); if (ticket >0) { if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES) == true) OrderModify (ticket, OrderOpenPrice(), SL, TP, 0); } } if (CountTrades() == 0 && FindLastOrderType() == OP_SELL && Ask >= NormalizeDouble(FindLastPrice(OP_SELL) + StopLoss*Point, Digits)) { SL = NormalizeDouble(Bid + StopLoss * Point, Digits); TP = NormalizeDouble(Bid - TakeProfit * Point, Digits); ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, comment, Magic, 0, Blue); if (ticket >0) { if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES) == true) OrderModify (ticket, OrderOpenPrice(), SL, TP, 0); } } if (CountTrades() == 0 && FindLastOrderType() == OP_BUY && Bid { SL = NormalizeDouble(Ask + StopLoss * Point, Digits); TP = NormalizeDouble(Ask - TakeProfit * Point, Digits); ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, comment, Magic, 0, Blue); if (ticket >0) { if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES) == true) OrderModify (ticket, OrderOpenPrice(), SL, TP, 0); } } }//+------------------------------------------------------------------+int CountBuy(){ int count = 0; for (int trade = OrdersTotal()-1; trade >=0; trade--) { OrderSelect(trade, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic ) { if (OrderType() == OP_BUY) count++; } } return(count);} //+------------------------------------------------------------------+int CountSell(){ int count = 0; for(int trade = OrdersTotal()-1; trade >=0; trade--) { OrderSelect(trade, SELECT_BY_POS, MODE_TRADES); if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic ) { if (OrderType() == OP_SELL) count++; } } return(count);} //+------------------------------------------------------------------+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); } Попробовал немного по другому, тоже не работает. не открываеться противоположный ордер от стопа ((( Спойлер //+------------------------------------------------------------------+//| Plan B ch3.mq4 |//| C |//| http:/ |//+------------------------------------------------------------------+#property copyright "C"#property link "http:/"#property version "1.00"#property strictextern double Lots = 0.1;extern int TakeProfit = 60;extern int StopLoss = 20;extern int inTakeProfit = 20;extern int inStopLoss = 15;extern int Step = 21;extern int Slippage = 3; extern int Magic = 12345;extern string comment = "Делаю Деньги";extern double Multipler = 2;extern string Indi = "Данные индикатора";extern string TimeFrame = "current time frame";extern int HalfLength = 56;extern int Price = PRICE_CLOSE;extern double ATRMultiplier = 2.0;extern int ATRPeriod = 100;extern bool Interpolate = true;double TP, SL, SL2, TP2, inTP, inSL, inTP2, inSL2, price, lastlot, PriceHigt, PriceLow;int ticket;//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+int OnInit() { if (Digits == 3 || Digits == 5) { TakeProfit *=10; StopLoss *=10; Step *=10; Slippage *=10; } return(INIT_SUCCEEDED); }//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+void OnDeinit(const int reason) { }//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+void OnTick() { PriceHigt = iCustom(Symbol(), 0, "TMA with Distances", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 1, 0); PriceLow = iCustom(Symbol(), 0, "TMA with Distances", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 2, 0); if (Ask >= PriceHigt && CountBuy() + CountSell() == 0) { SL =NormalizeDouble(Ask - StopLoss * Point, Digits); TP =NormalizeDouble(Ask + TakeProfit * Point, Digits); ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, comment, Magic, 0, Blue); if (ticket >0) { if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES) == true) OrderModify (ticket, OrderOpenPrice(), SL, TP, 0); } } if (Bid { SL = NormalizeDouble(Bid + StopLoss * Point, Digits); TP = NormalizeDouble(Bid - TakeProfit * Point, Digits); ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, comment, Magic, 0, Blue); if (ticket >0) { if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES) == true) OrderModify (ticket, OrderOpenPrice(), SL, TP, 0); } } else { int order_type = FindLastOrderType(); if (order_type == OP_BUY) { price = FindLastPrice(OP_BUY); if((price - Bid)/Point >= StopLoss) { ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, comment, Magic, 0, Red); if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES)) { TP = NormalizeDouble(OrderOpenPrice() - TakeProfit * Point, Digits); SL = NormalizeDouble(OrderOpenPrice() + StopLoss * Point, Digits); OrderModify(ticket, OrderOpenPrice(), SL, TP, 0); } } } } int order_type = FindLastOrderType(); if (order_type == OP_SELL) { price = FindLastPrice(OP_SELL); if((Ask - price)/Point >= StopLoss) { ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, comment, Magic, 0, Red); if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES)) { TP = NormalizeDouble(OrderOpenPrice() + TakeProfit * Point, Digits); SL = NormalizeDouble(OrderOpenPrice() - StopLoss * Point, Digits); OrderModify(ticket, OrderOpenPrice(), SL, TP, 0); } } } }//+------------------------------------------------------------------+int CountBuyStop(){ int count = 0; for (int i = OrdersTotal()-1; i >= 0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUYSTOP ) count++; } } return(count);}//+------------------------------------------------------------------+int CountSellStop(){ int count = 0; for (int i = OrdersTotal()-1; i >= 0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELLSTOP ) count ++; } } return(count);}//+------------------------------------------------------------------+void DeleteOrders(){ for(int trade=OrdersTotal() -1; trade >=0; trade--) { OrderSelect(trade, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP) { OrderDelete(OrderTicket(), Black); } }}//+------------------------------------------------------------------+int CountBuy(){ int count = 0; for (int trade = OrdersTotal()-1; trade >=0; trade--) { OrderSelect(trade, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic ) { if (OrderType() == OP_BUY) count++; } } return(count);} //+------------------------------------------------------------------+int CountSell(){ int count = 0; for(int trade = OrdersTotal()-1; trade >=0; trade--) { OrderSelect(trade, SELECT_BY_POS, MODE_TRADES); if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic ) { if (OrderType() == OP_SELL) count++; } } return(count);} //+------------------------------------------------------------------+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); } Изменено 17 марта, 2014 пользователем Алексей7779000 Ссылка на сообщение Поделиться на другие сайты More sharing options...
pegaskrs Опубликовано 18 марта, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 18 марта, 2014 раставь GetLastError(); и принты после каждого условия и смотри журнал найдёшь где глючиттакже обнуление переменных в функциях oldopenprice и тд и тпразмер лота проверь если на твоём типе счёта мин лот 0.1 то в настройках должно быть 0.1 а не 0.01 Изменено 18 марта, 2014 пользователем pegaskrs Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sergoot Опубликовано 18 марта, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 18 марта, 2014 :-HДобрый день.Искал в ветке, но так и не нашел. Может кто подскажет, как модифицировать к примеру 2 ордера на разных валютах по принципу мартингейла?На одной валюте понятно, а так чтобы получить б/у по 2 парам не понятно.Спасибо за любой ответ. Вместо Symbol() в функции модификации указываешь какой символ необходимо модифицировать. Ссылка на сообщение Поделиться на другие сайты More sharing options...
cyberg Опубликовано 21 марта, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 21 марта, 2014 Здравствуйте, помогите пожалуйста...Если мне нужно взять данные например с ЕМА 5 наложенного на график цены то я делаю так:double Tg;Tg =iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,i);подскажите плз. как взять данные индикатора MA который наложен например на RSI и берёт данные не с графика цены, а с осцилятора RSI и строится в нём по его данным, т.е. Apply to : First Indicator's DataЗаранее спасибо. Ссылка на сообщение Поделиться на другие сайты More sharing options...
nicholas Опубликовано 22 марта, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 22 марта, 2014 Ошибка в том, что когда ордер закрывается то он уже не в списке активных, а истории.Поэтому нужно там его искать: // retrieving info from trade history int i,accTotal=OrdersHistoryTotal(); for(i=0;i { //---- check selection result if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Ошибка при доступе к исторической базе (",GetLastError(),")"); break; } // работа с ордером ... } Ссылка на сообщение Поделиться на другие сайты More sharing options...
xbms Опубликовано 22 марта, 2014 Автор Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 22 марта, 2014 Что-то не видно активности, решений задачки по уроку... :)Урок с классами показался тяжёлым?Дальше будет ещё сложней... наследование, инкапсуляция и т.д. Во сколько новых слов :) 3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
denis77515 Опубликовано 22 марта, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 22 марта, 2014 Господин xbms,Сергей дайте время переворотить информацию,допустим я сейчас пытаюсьсложить в кучу ваши два урока.Но пока не очень успешно,я пока сам код не напишу хотя бы какой нибудь который работать будет.Подчеркиваю,свой то есть свою идею. Я не пойму как это все работает,списать легко,разобраться в этом сложнее.По этому наверное нет не кого. Добавлено: 22-03-2014 14:17:07Господин XBMS у меня просьба к вам такого плана,могли вы помочь разобраться с кодом.На одном из форумов один отзывчивый программист набросал мне часть кода.как раз получается из области ваших не давних уроков.В сообщение выше я писал уже причину не понимания пока всего этого.Я хотел написать функцию наверное известной вам ТС Кукловод открытия хотя бы одной корзины ордеров.Просьба заключается в следующем,я совсем не понял как там работать все должно.там явно чего то не хватает.Подскажите чего ? Если вас не затруднит посмотреть код и построчно дать комментарии,ото я там совсем заблудился ! >:d :( Спойлер [string Smbl[];int CntBuy[],CntSell[];void OnStart(){ if(CountBuySell(Smbl, CntSell, CntBuy)) for(int i=0; i, CntBuy, CntSell);}//---------------------------------------------------------------++bool CountBuySell(string &symb[], int &cnt_sell[], int &cnt_buy[]){ int ot,n,N=0,f=0,cb=0,cs=0; string symbol; for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { ot=OrderType()+1; if(ot>2) continue; // пропускаем лимит ордера symbol=""; symbol=OrderSymbol(); if (symbol=="") continue; // убедились что символ выбран f=0; cb=0; cs=0; // обнулили счетчики и флаг символа for (n=0; n if (f==0) // такого символа symbol=OrderSymbol() еще не было, увеличим размерность массивов под новый символ и запишем этот символ { N++; ArrayResize(symb,N); ArrayResize(cnt_buy,N); ArrayResize(cnt_sell,N); symb[N-1]=symbol; cnt_buy[N-1]=0.0; cnt_sell[N-1]=0; } if(ot==1) cb++; // OP_BUY для выбранного символа else cs++; // OP_SELL // перебираем массив и сравним его с выбранным символом. В найденный индекс запишем для данного символа кол-во откр позиций // такоим образом для каждого индекса всех 3 массивов будет соответствовать конкретный символ и количество позиций покупки и продажи для него for (n=0; n } } if(N>0) return(1); // есть открытые позиции return(0); // позиций нет}//-------------------------------------------------------------------------++] Изменено 22 марта, 2014 пользователем denis77515 Ссылка на сообщение Поделиться на другие сайты More sharing options...
xbms Опубликовано 22 марта, 2014 Автор Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 22 марта, 2014 Господин xbms,Сергей дайте время переворотить информацию,допустим я сейчас пытаюсьсложить в кучу ваши два урока.Но пока не очень успешно,я пока сам код не напишу хотя бы какой нибудь который работать будет.Подчеркиваю,свой то есть свою идею. Я не пойму как это все работает,списать легко,разобраться в этом сложнее.По этому наверное нет не кого. Добавлено: 22-03-2014 14:17:07Господин XBMS у меня просьба к вам такого плана,могли вы помочь разобраться с кодом.На одном из форумов один отзывчивый программист набросал мне часть кода.как раз получается из области ваших не давних уроков.В сообщение выше я писал уже причину не понимания пока всего этого.Я хотел написать функцию наверное известной вам ТС Кукловод открытия хотя бы одной корзины ордеров.Просьба заключается в следующем,я совсем не понял как там работать все должно.там явно чего то не хватает.Подскажите чего ? Если вас не затруднит посмотреть код и построчно дать комментарии,ото я там совсем заблудился ! >:d :( Спойлер [string Smbl[];int CntBuy[],CntSell[];void OnStart(){ if(CountBuySell(Smbl, CntSell, CntBuy)) for(int i=0; i, CntBuy, CntSell);}//---------------------------------------------------------------++bool CountBuySell(string &symb[], int &cnt_sell[], int &cnt_buy[]){ int ot,n,N=0,f=0,cb=0,cs=0; string symbol; for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { ot=OrderType()+1; if(ot>2) continue; // пропускаем лимит ордера symbol=""; symbol=OrderSymbol(); if (symbol=="") continue; // убедились что символ выбран f=0; cb=0; cs=0; // обнулили счетчики и флаг символа for (n=0; n if (f==0) // такого символа symbol=OrderSymbol() еще не было, увеличим размерность массивов под новый символ и запишем этот символ { N++; ArrayResize(symb,N); ArrayResize(cnt_buy,N); ArrayResize(cnt_sell,N); symb[N-1]=symbol; cnt_buy[N-1]=0.0; cnt_sell[N-1]=0; } if(ot==1) cb++; // OP_BUY для выбранного символа else cs++; // OP_SELL // перебираем массив и сравним его с выбранным символом. В найденный индекс запишем для данного символа кол-во откр позиций // такоим образом для каждого индекса всех 3 массивов будет соответствовать конкретный символ и количество позиций покупки и продажи для него for (n=0; n } } if(N>0) return(1); // есть открытые позиции return(0); // позиций нет}//-------------------------------------------------------------------------++] Денис, теперь уже мне нужно время разобраться.Т.к. я какое-то время не следил за форумом, ибо некогда, и по сему ТС "Кукловод" мне незнакома :)Как только найду время - разберусь и попробую помочь. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
denis77515 Опубликовано 22 марта, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 22 марта, 2014 Сергей, спасибо за вашу отзывчивость! =d> Ссылка на сообщение Поделиться на другие сайты More sharing options...
Юла Опубликовано 22 марта, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 22 марта, 2014 Как можно исправить ошибки в индикаторах для нового терминала, содержащих char ? if((char > 96 && char 223 && char s = StringSetChar(s, lenght, char - 32); else if(char > -33 && char s = StringSetChar(s, lenght, char + 224); lenght--; T3_clean.mq4 Изменено 22 марта, 2014 пользователем Юла Ссылка на сообщение Поделиться на другие сайты More sharing options...
xbms Опубликовано 22 марта, 2014 Автор Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 22 марта, 2014 Как можно исправить ошибки в индикаторах для нового терминала, содержащих char ? if((char > 96 && char 223 && char s = StringSetChar(s, lenght, char - 32); else if(char > -33 && char s = StringSetChar(s, lenght, char + 224); lenght--; в данном случае char идёт как переменная... её можно просто назвать по другому, ну или например добавить символ подчёркивания "_", будет как "char_", хотя в этом коде и других проблем хватает... Ссылка на сообщение Поделиться на другие сайты More sharing options...
35aleks Опубликовано 24 марта, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 марта, 2014 Всем Привет!Может кто подсказать, где я напортачил.Про бывал написать советник на основе индикатора ATR_the_bat пока без фибоначи просто при пробитии линии заключал сделку, но если цена идет выше линии он открывает море ордеров.Писал на основе 3 урока.За ранее спасибо!Ну зачем эти символы при каждом сообщение и т.д. не захочешь общаться даже после это чуши ATR_bot.mq4ATR_the_bat.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
denis77515 Опубликовано 24 марта, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 марта, 2014 Вот смотри в строчке if (Ask >=PriceHigh && CountSell() == 0) уже ошибка. if (Ask >=PriceHigh если вот это условие не выполняется ,то вот это && CountSell() == 0) игнорируется совсем.Тебе нужно было записать условие проверки ордеров как во всех уроках if( OrdersTotal() == 0 && CountBuy() == 0 && CountSell() == 0) { ............. } Ссылка на сообщение Поделиться на другие сайты More sharing options...
35aleks Опубликовано 24 марта, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 марта, 2014 Вот смотри в строчке if (Ask >=PriceHigh && CountSell() == 0) уже ошибка. if (Ask >=PriceHigh если вот это условие не выполняется ,то вот это && CountSell() == 0) игнорируется совсем.Тебе нужно было записать условие проверки ордеров как во всех уроках if( OrdersTotal() == 0 && CountBuy() == 0 && CountSell() == 0) { ............. } спасибо сейчас глянуДобавлено: 24-03-2014 11:14:20А почему в первом варианте открывал позицию по линии индюка, а после исправления сразу и после закрытия тоже в этом же направлении Изменено 24 марта, 2014 пользователем 35aleks Ссылка на сообщение Поделиться на другие сайты More sharing options...
denis77515 Опубликовано 24 марта, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 марта, 2014 Со скобками подумать надо,я сейчас попробовал накидать эту сову,у меня то же получилось,что открывает только Sell ордера.условие на пакупку не выполняются,надо подумать почему ? Посмотри если есть желание. Спойлер [//+------------------------------------------------------------------+//| 1.mq4 |//| Copyright 2014, MetaQuotes Software Corp. |//| http://www.metaquotes.net |//+------------------------------------------------------------------+#property copyright "Klonoz Denis 06.03.2014"#property link "skype-denis77515"#property version "1.00"#property strictextern double Lots = 0.01;extern int TakeProfit = 100;extern int StopLoss = 30;extern int Slippage = 5;extern string comment = "ATR boot";extern int Magic = 123;extern string indi = "Prametr indik";extern int BackPeriod = 1000;extern int ATRPeriod = 3;extern double Factor = 3;extern bool TypicalPrice = false;double PriceHigh, PriceLow, SL, TP;int ticket;//+------------------------------------------------------------------+//| expert initialization function |//+------------------------------------------------------------------+int OnInit(){ if (Digits == 3 || Digits == 5) { TakeProfit *= 10; StopLoss *= 10; Slippage *= 10; } return(INIT_SUCCEEDED);}//+------------------------------------------------------------------+//| expert deinitialization function |//+------------------------------------------------------------------+void OnDeinit(const int reason){}//+------------------------------------------------------------------+//| expert start function |//+------------------------------------------------------------------+void OnTick(){ PriceHigh = iCustom(Symbol(), 0, "ATR_the_bat", BackPeriod, ATRPeriod, Factor,0,0); PriceLow = iCustom(Symbol(), 0, "ATR_the_bat", BackPeriod, ATRPeriod, Factor,1,0); if(OrdersTotal()==0 && CountBuy() == 0 && CountSell() == 0) { if(Ask>=PriceHigh) { ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, comment, Magic, 0, Blue); } if (ticket > 0) ModifyOrderBuy(); if (Bid { ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, comment, Magic, 0, Red); } if (ticket > 0) ModifyOrderSell(); }//if (OrdersTotal()==0 && CountBuy() == 0 && CountSell() == 0)}//+------------------------------------------------------------------+void ModifyOrderBuy(){for(int i=OrdersTotal()-1; i>=0; i--){if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic){if(OrderType()== OP_BUY) SL = NormalizeDouble(Ask - StopLoss * Point, Digits);TP = NormalizeDouble(Ask + TakeProfit * Point, Digits);OrderModify(ticket, OrderOpenPrice(), SL, TP, 0);}}}}//+------------------------------------------------------------------+void ModifyOrderSell(){for(int i=OrdersTotal()-1; i>=0; i--){if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)){if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic){if(OrderType()== OP_SELL) SL = NormalizeDouble(Bid + StopLoss * Point, Digits);TP = NormalizeDouble(Bid - TakeProfit * Point, Digits);OrderModify(ticket, OrderOpenPrice(), SL, TP, 0);}}}}//+------------------------------------------------------------------+int CountSell(){int count=0;for(int i=OrdersTotal()-1; i>=0; i--){OrderSelect(i,SELECT_BY_POS,MODE_TRADES);{if(OrderType() == OP_SELL)count++;}}return(count);}//+------------------------------------------------------------------+int CountBuy(){int count=0;for(int i=OrdersTotal()-1; i>=0; i--){OrderSelect(i,SELECT_BY_POS,MODE_TRADES);{if(OrderType() == OP_BUY)count++;}}return(count);}] Ссылка на сообщение Поделиться на другие сайты More sharing options...
35aleks Опубликовано 24 марта, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 марта, 2014 а у меня только бай Добавлено: 25-03-2014 06:52:02Все разобрался. Там нужно поменять местами CountSell с CountBuy.Кто может подсказать как прикрутить фибо уровни что бы по ним открывались отложники?Добавлено: 25-03-2014 07:04:50с фибо разобрался как сделаю советник выложу Изменено 25 марта, 2014 пользователем 35aleks Ссылка на сообщение Поделиться на другие сайты More sharing options...
Redeemer Опубликовано 26 марта, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 марта, 2014 Здравствуйте! :)Подскажите пожалуйста в чём может быть проблема.Ругается на одни и те же функции... Пример кода //+------------------------------------------------------------------+int CountSell(){ for(int trade = OrdersTotal() -1; trade >=0; trade--) { [glow=yellow,2,300]OrderSelect[/glow](trade, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if (OrderType() == OP_SELL) Count++; } } return(Count);}//+------------------------------------------------------------------+void CloseOrders(){ for(int trade=OrdersTotal()-1; trade >= 0; trade--) { [glow=yellow,2,300]OrderSelect[/glow](trade, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { [glow=yellow,2,300]OrderDelete[/glow](OrderTicket(), Black); } }}//+------------------------------------------------------------------+ warning.jpg Изменено 26 марта, 2014 пользователем Redeemer Ссылка на сообщение Поделиться на другие сайты More sharing options...
fv2500 Опубликовано 26 марта, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 марта, 2014 Я не понял, как работает ChartIDкод из справки: string obj_name="label_object"; long current_chart_id=ChartID();//--- создаем объект типа label if(!ObjectCreate(current_chart_id,obj_name,OBJ_LABEL,0,0,0)) { Print("Ошибка создания объекта: code #",GetLastError()); return; } тупо не работает:2014.03.26 17:11:24.105 2014.01.02 09:59 Buttons USDCHF,H1: Ошибка создания объекта: code #4202Код ошибки #4202 из той же справки гласит: 4202 ERR_OBJECT_DOES_NOT_EXIST Объект не существуетПод объектом, видимо, имеется в виду несуществующий график.При этом, если вместо current_chart_id подставить 0т.е. вместо: long current_chart_id=ChartID();написатьlong current_chart_id=0;, то всё работает.Как это понимать? Кто из нас глючит?Добавлено: 26-03-2014 13:48:02 Спойлер Я не понял, как работает ChartIDкод из справки: string obj_name="label_object"; long current_chart_id=ChartID();//--- создаем объект типа label if(!ObjectCreate(current_chart_id,obj_name,OBJ_LABEL,0,0,0)) { Print("Ошибка создания объекта: code #",GetLastError()); return; } тупо не работает:2014.03.26 17:11:24.105 2014.01.02 09:59 Buttons USDCHF,H1: Ошибка создания объекта: code #4202Код ошибки #4202 из той же справки гласит: 4202 ERR_OBJECT_DOES_NOT_EXIST Объект не существуетПод объектом, видимо, имеется в виду несуществующий график.При этом, если вместо current_chart_id подставить 0т.е. вместо: long current_chart_id=ChartID();написатьlong current_chart_id=0;, то всё работает.Как это понимать? Кто из нас глючит? Нашелся ответ опытным путем. Это работает в он-лайне. В тестере не хочет. События, кажется, тоже в тестере не работают.Добавлено: 26-03-2014 13:48:55это ужасно :(( Изменено 26 марта, 2014 пользователем fv2500 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
35aleks Опубликовано 26 марта, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 марта, 2014 Можете подсказать как прописать что бы профит был в валюте, не в пунктах?по общему балансу счета что бы все закрыл Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти