Не прошёл проверку
System Тестирование кода завершено с ошибками: При тестировании кода Command Line Utility были выявлены ошибки.
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
разница с опубликованным - в функциях открытии и закрытии
Command Line Utility.mq5 102 kb
Саша, у кого вы учились такому программированию?
это я пытался из этого эксперта взять функции Скачать бесплатно эксперт 'SerialMA_EA' от 'Scriptor' для MetaTrader 5 в MQL5 Code Base, 2018.02.27
\\\\\\\\\\\\\\\\\\\\\\\\
то есть я их от туда и взял
Саша, у кого вы учились такому программированию?
С Вашим экспертом тоже всё пытаюсь разобраться - что не будь придумать.
//+------------------------------------------------------------------+ //| 00001.mq5 | //+------------------------------------------------------------------+ //| DVA_Martin.mq5 | //| © 2021, Alexey Viktorov | //| https://www.mql5.com/ru/users/alexeyvik/news | //+------------------------------------------------------------------+ #property copyright "© 2021, Alexey Viktorov" #property link "https://www.mql5.com/ru/users/alexeyvik/news" #property version "3.00" //--- #include <Trade\Trade.mqh> #include <Trade\SymbolInfo.mqh> #include <Trade\PositionInfo.mqh> #include <Trade\AccountInfo.mqh> //--- double m_adjusted_point; // : point value adjusted for 3 or 5 points CTrade m_trade; // : trading object CSymbolInfo m_symbol; // : symbol info object CPositionInfo m_position; // : trade position object CAccountInfo m_account; // : account info wrapper //--- input int Step = 200; // step of the first position input int Delta = 100; // addition to the step // from the second position, it increases the distance of subsequent positions by the amount of "delta" from the previous one input double Lot = 0.2; // the first opening lot input double MaximalLot = 2.0; // the maximum lot that we allow input int MaxTrades = 9; // maximum number of positions in one direction input double MultiplicatorLot = 1.6; // multiply the following positions input int Magic = 123; // the adviser's ID //--- Variables for storing the collected information bool ProcessBuy=false; bool ProcessSell=false; double MaxLot = 0,LotBuy = 0,LotSell = 0; string m_name_but[]= {"BUY","SELL"}; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double contractSize(double volume, string symbol = NULL) { symbol = symbol == NULL ? _Symbol : symbol; double v = volume; double volumeStep = SymbolInfoDouble(symbol, SYMBOL_VOLUME_STEP); v = round(volume/volumeStep)*volumeStep; double minLot = SymbolInfoDouble(symbol, SYMBOL_VOLUME_MIN); return((v < minLot ? minLot : v)); } //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- initialize common information if(!m_symbol.Name(Symbol())) return(false); RefreshRates(); m_trade.SetExpertMagicNumber(Magic); m_trade.SetMarginMode(); m_trade.SetTypeFillingBySymbol(Symbol()); //--- tuning for 3 or 5 digits int digits_adjust=1; if(m_symbol.Digits()==3 || m_symbol.Digits()==5) digits_adjust=10; m_adjusted_point=m_symbol.Point()*digits_adjust; //--- set default deviation for trading in adjusted points MaxLot = contractSize(MaximalLot); //--- set default deviation for trading in adjusted points m_trade.SetDeviationInPoints(3*digits_adjust); //--- int but_y=5; for(int i=0; i<ArraySize(m_name_but); i++) { ButtonCreate(m_name_but[i],but_y,17,30,15,8); but_y=but_y+30; } //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- for(int i=0; i<ArraySize(m_name_but); i++) { ObjectDelete(0,Symbol()+m_name_but[i]); } //--- Comment(""); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { CheckButon(); //--- if(ProcessingBuy(ProcessBuy)||ProcessingSell(ProcessSell)) return; } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ bool ProcessingBuy(const bool to_correct) { if(!m_symbol.Name(Symbol())) return(false); RefreshRates(); int posTotal = PositionsTotal(); double BuyMinPrice = DBL_MAX; double BuyMinLot = 0; double posPrice = 0.0,posLot = 0.0; //--- int b = 0; for(int i = 0; i < posTotal; i++) { ulong posTicket = PositionGetTicket(i); if(PositionGetString(POSITION_SYMBOL) == _Symbol && PositionGetInteger(POSITION_MAGIC) == Magic) { posPrice = PositionGetDouble(POSITION_PRICE_OPEN); posLot = PositionGetDouble(POSITION_VOLUME); if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY) { b++; // We consider open positions for purchase if(posPrice < BuyMinPrice) { BuyMinPrice = posPrice; BuyMinLot = posLot; } } } } //--- LotBuy = b == 0 ? contractSize(Lot) : fmin(MaxLot, contractSize(BuyMinLot*MultiplicatorLot)); //--- BUY Signal if(to_correct && (b == 0 || (b < MaxTrades && BuyMinPrice-m_symbol.Ask() >= (Step+Delta*b)*_Point))) openPos(ORDER_TYPE_BUY,LotBuy,m_symbol.Ask()); //--- exit without position processing return(false); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ bool ProcessingSell(const bool to_correct) { if(!m_symbol.Name(Symbol())) return(false); RefreshRates(); int posTotal = PositionsTotal(); double SelMaxPrice = DBL_MIN; double SelMaxLot = 0; double posPrice = 0.0,posLot = 0.0; //--- int s = 0; for(int i = 0; i < posTotal; i++) { ulong posTicket = PositionGetTicket(i); if(PositionGetString(POSITION_SYMBOL) == _Symbol && PositionGetInteger(POSITION_MAGIC) == Magic) { posPrice = PositionGetDouble(POSITION_PRICE_OPEN); posLot = PositionGetDouble(POSITION_VOLUME); if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL) { s++; // We consider open positions for sale if(posPrice > SelMaxPrice) { SelMaxPrice = posPrice; SelMaxLot = posLot; } } } } //--- LotSell = s == 0 ? contractSize(Lot) : fmin(MaxLot, contractSize(SelMaxLot*MultiplicatorLot)); //--- SELL Signal if(to_correct && (s == 0 || (s < MaxTrades && m_symbol.Bid()-SelMaxPrice >= (Step+Delta*s)*_Point))) openPos(ORDER_TYPE_SELL,LotSell,m_symbol.Bid()); //--- exit without position processing return(false); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void openPos(ENUM_ORDER_TYPE type, double lot, double price) { m_trade.CheckVolume(_Symbol, lot, price, type); if(m_trade.CheckResultMarginFree() <= 0.0) { Print("Not enough money for ", EnumToString(type), " ", lot, " ", _Symbol, " Error code=", m_trade.CheckResultRetcode()); return; } if(!m_trade.PositionOpen(_Symbol, type, lot, price, 0.0, 0.0)) Print(m_trade.ResultRetcode()); PlaySound("ok.wav"); } //+------------------------------------------------------------------+ //| Refreshes the symbol quotes data | //+------------------------------------------------------------------+ bool RefreshRates() { //--- refresh rates if(!m_symbol.RefreshRates()) { return(false); } //--- protection against the return value of "zero" if(m_symbol.Ask()==0 || m_symbol.Bid()==0) { return(false); } return(true); } //+------------------------------------------------------------------+ // buttoncreate | //+------------------------------------------------------------------+ bool ButtonCreate(string name,int Xdist, int Ydist,int Xsize,int Ysize,int FONTSIZE=12) { if(ObjectFind(0,Symbol()+name)<0) ObjectCreate(0,Symbol()+name,OBJ_BUTTON,0,100,100); ObjectSetInteger(0,Symbol()+name,OBJPROP_COLOR,clrWhite); ObjectSetInteger(0,Symbol()+name,OBJPROP_BGCOLOR,clrDimGray); ObjectSetInteger(0,Symbol()+name,OBJPROP_XDISTANCE,Xdist); ObjectSetInteger(0,Symbol()+name,OBJPROP_YDISTANCE,Ydist); ObjectSetInteger(0,Symbol()+name,OBJPROP_XSIZE,Xsize); ObjectSetInteger(0,Symbol()+name,OBJPROP_YSIZE,Ysize); ObjectSetString(0,Symbol()+name,OBJPROP_FONT,"Sans Serif"); ObjectSetString(0,Symbol()+name,OBJPROP_TEXT,name); ObjectSetInteger(0,Symbol()+name,OBJPROP_FONTSIZE,FONTSIZE); ObjectSetInteger(0,Symbol()+name,OBJPROP_SELECTABLE,false); return(true); } //+------------------------------------------------------------------+ //| Check for long position closing | //+------------------------------------------------------------------+ bool CheckButon(void) { //--- bool res=false; if(ObjectGetInteger(0,Symbol()+"BUY",OBJPROP_STATE)!=0) { ObjectSetInteger(0,Symbol()+"BUY",OBJPROP_STATE,0); ProcessBuy=true; } if(ObjectGetInteger(0,Symbol()+"SELL",OBJPROP_STATE)!=0) { ObjectSetInteger(0,Symbol()+"SELL",OBJPROP_STATE,0); ProcessSell=true; } res=true; //--- result return(res); } //+------------------------------------------------------------------+
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
нравится мне как он умножает лот
С Вашим экспертом тоже всё пытаюсь разобраться - что не будь придумать.
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
нравится мне как он умножает лот
Только убери пожалуйста все упоминания обо мне из этого кода.Ведь могут подумать, что я так на *****кодил…
Хорошо! - Вам Спасибо! - я всё пытаюсь на учится, но наверное мне не дано правильно научится.
Скажи мне пожалуйста, для чего в коде такая функция
//+------------------------------------------------------------------+ //| Refreshes the symbol quotes data | //+------------------------------------------------------------------+ bool RefreshRates() { //--- refresh rates if(!m_symbol.RefreshRates()) { return(false); } //--- protection against the return value of "zero" if(m_symbol.Ask()==0 || m_symbol.Bid()==0) { return(false); } return(true); }
Зачем тройная проверка?
Разве SymbolInfoTick не достаточно? Или оплата идёт от количества строк кода?
Скажи мне пожалуйста, для чего в коде такая функция
Зачем тройная проверка?
Разве SymbolInfoTick не достаточно? Или оплата идёт от количества строк кода?
это я - что бы наверняка, сработало. - Просто ещё буду добавлять из другого кода, а там присутствует эта функция.
это я - что бы наверняка, сработало. - Просто ещё буду добавлять из другого кода, а там присутствует эта функция.
Читай документацию и внимательней разбирай ***код, откуда копируешь функции.
Вот читай свой код
//--- refresh rates if(!m_symbol.RefreshRates())
Практически ты получаешь выполнение функции SymbolInfoTick
//+------------------------------------------------------------------+ //| Refresh cached data | //+------------------------------------------------------------------+ bool CSymbolInfo::RefreshRates(void) { return(SymbolInfoTick(m_name,m_tick)); }
которая возвращает bool и по хорошему этого достаточно. Но только не для тебя. Ты ставишь ещё одно условие: если функция вернула false, то вернуть false. Дальше-больше… Если функция вернула false, то дальше код не выполняется, а если вернула true то условие
//--- protection against the return value of "zero" if(m_symbol.Ask()==0 || m_symbol.Bid()==0)
выполнено не будет. Зачем оно тут?
Не копируй ***код, включи голову. Как это делать Путин показал, посмотри…
Спасибо! буду исправляться. по ходу действия я прочитываю документацию и смотрю примеры, но все равно , наверное мне не дано, не зря я двоечником в школе был, за то по спорту был
чемпионом советского союза по тяжёлой атлетике
Представляешь, я тоже не троечником был. Восьмой класс закончил имея 4 по математике и 5 двоек… Директор разрешил сдать зачёты по этим предметам с условием, что я уйду в ПТУ.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Command Line Utility:
Утилита команд от Цветных линий
Автор: SanAlex