Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 118

 
trader781:
Артём, код выше я кинул
Где? Вот ссылка на ваше сообщение, на которое я отвечаю: . Она находится в стоке рядом с вашим ником.

Скопируйте такую же ссылку на ваш код, который вы кинули выше и вставляйте в ваше сообщение, когда отсылаете к какому-либо сообщению кого-либо из участников . А то, думаете, его искать, не зная где он, и о чём он, так сильно хочется?
 
Artyom Trishkin:
Где? Вот ссылка на ваше сообщение, на которое я отвечаю: . Она находится в стоке рядом с вашим ником.

Скопируйте такую же ссылку на ваш код, который вы кинули выше и вставляйте в ваше сообщение, когда отсылаете к какому-либо сообщению кого-либо из участников . А то, думаете, его искать, не зная где он, и о чём он, так сильно хочется?

https://www.mql5.com/ru/forum/160683/page109

 1082 сообщение 

Я просто не знаю как на этом ресурсе, но обычно модератор видит все сообщения любого пользователя включая правки.

Как делать такую сслку на сообщение понятия не имею. 

 
trader781:

https://www.mql5.com/ru/forum/160683/page109

 1082 сообщение 

Я просто не знаю как на этом ресурсе, но обычно модератор видит все сообщения любого пользователя включая правки.

Как делать такую сслку на сообщение понятия не имею. 

ВОТ СЮДА ВСТАВЛЯЕМ:

 
trader781:

https://www.mql5.com/ru/forum/160683/page109

 1082 сообщение

Нет, загружать себе нет желания.

Прикрепите сюда как код, используя кнопку SRC. Тогда можно будет спокойно поглядеть код, не прибегая к загрузке и размещению его в нужной папке терминала - зачем усложнять жизнь тем, кто может вам помочь?
 
Artyom Trishkin:
Нет, загружать себе нет желания.

Прикрепите сюда как код, используя кнопку SRC. Тогда можно будет спокойно поглядеть код, не прибегая к загрузке и размещению его в нужной папке терминала - зачем усложнять жизнь тем, кто может вам помочь?

Пожалуйста, только я не понимаю как его проверять без загрузки себе на терминал. Тоже просьба объяснить в чем преимущество кидать сюда куски кода, забивающие страницу.

 

 

//+------------------------------------------------------------------+
//|                                                     Close_MA.mq4 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

extern bool Uslovie1=false;//Uslovie 4 6+50 MA

extern bool OpenOrders=false;//+---Открыть ордер

extern double Lots=0.01; //Oбьем открываемого ордера

extern const string Настройки_работы_советника="";

extern int Period1=6;//Период 1МА
extern ENUM_APPLIED_PRICE PRICE1=PRICE_MEDIAN;             // 1МА По цене

extern int Period2=50;//Период 2МА
extern ENUM_APPLIED_PRICE PRICE2=PRICE_MEDIAN;             // 2МА По цене

extern int Period3=1000;//Период 3МА
extern ENUM_APPLIED_PRICE PRICE3=PRICE_MEDIAN;             // 3МА По цене

extern uint X=1;                                           // отклонение от ма, пунктов
extern bool PlaySound=false;
extern int M=1000;                                         // миллисекунды в Sleep
extern int R;                                              // раз повторения музыки
extern int count=0;  
extern int Step=500;                                      // счетчик тиков 500макс.
int   i;                                                   // исходный счетчик ордеров
int   p=0;                                                 // внутренняя для playSound
bool  y = false;                                           // для удобства сравнений условий 1,2,3,4,5,6  
bool  dummy;                                               // для выхода функций в переменную
int   ticket = 0;                                          // тикет открываемого ордера
int Magic = 222;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+



int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  }

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+



//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
     {
      if(Bars<801 || (IsTradeAllowed()==false)) //--- Проверим достаточна ли в истории баров для анализа и разрешение торговли
         return;
     }
//+----------------------------------------------------------------

   double ma1=NormalizeDouble(iMA(NULL,0,Period1,0,MODE_SMA,PRICE1,0),5);

   double ma2=NormalizeDouble(iMA(NULL,0,Period2,0,MODE_SMA,PRICE1,0),5);   //три заданных параметра ма

   double ma3=NormalizeDouble(iMA(NULL,0,Period3,0,MODE_SMA,PRICE1,0),5);
//+-----------------------------------------------------------------  Открытие ордеров


                               //+----Купить


       {
         if(MathAbs(Bid-ma3)<1000*Point() && (myOrdersTotal()==false))  
           {
            ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,50,0,0,"",Magic,0,clrLightGray);//+------отправка 1 ордера
            HLineCreate();  
           }
         else if ((Ask>=(FindLastOrderOpenPrice()+(Step*_Point)))&& myOrdersTotal())//+------------если ордер в плюс
              {
            ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,50,0,0,"",Magic,0,clrLightGray);
            HLineMove();
              }
         else if ((Ask<=(FindLastOrderOpenPrice()-(Step*_Point)))&& myOrdersTotal())//+------------если ордер вплюс
              {
            ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,50,0,0,"",Magic,0,clrLightGray);
            HLineMove();
              }
         else if(ticket==0)
           {
            return;
           }          
    /*          
                               //+----Продать

         if(MathAbs(Bid-ma3)>1000*Point() && (myOrdersTotal()==false))
           {
            ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,50,0,0,"",Magic,0,clrLightGray);//+------отправка 1 ордера
            HLineCreate1();  
           }
         else if ((Ask>=(FindLastOrderOpenPrice()+(Step*_Point)))&& myOrdersTotal())//+------------если ордер в минус
              {
            ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,50,0,0,"",Magic,0,clrLightGray);
            HLineMove1();
              }
         else if ((Ask<=(FindLastOrderOpenPrice()-(Step*_Point)))&& myOrdersTotal())//+------------если ордер вплюс
              {
            ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,50,0,0,"",Magic,0,clrLightGray);
            HLineMove1();
              }
         else if(ticket==0)
           {
            return;
           }       */
    
       }
      
    
      
//+------------------------------------------------------------------Условия
   if(Uslovie1==true) //Bid+ma800
     {
      if((Bid>=ma3-X*Point && Bid<ma3) || (Bid<=ma3+X*Point && Bid>ma3))
        {
           {y=true;}
        }
     }
//+------------------------------------------------------------------закрыть покупки или продажи

   if((y==true) && (myOrdersTotal()==true)) //продажа
     {
      dummy=(OrderClose(OrderTicket(),OrderLots(),Ask,0,White));
     }
   if((y==true) && (myOrdersTotal()==false))
     {
        dummy=false;
        HLineDelete();
        HLineDelete1();
    //  ExpertRemove();  
     }

  }
//+------------------------------------------------------------------+
bool myOrdersTotal() //если ордера есть
  {
   for(i=OrdersTotal()-1; i>=0; i--) //   цикл будет работать пока не останется ордеров
     {
      if(((OrderSelect(i,SELECT_BY_POS,MODE_TRADES))==true) && OrderSymbol()==Symbol() && (OrderType()<2))
        {
         return true;
        }
     }
   return false;
  }
//-------------------------------------------------------------------
double FindLastOrderOpenPrice()
  {
   double oldorderopenprice=0;
   int    oldticket=0;
   ticket=0;
   for(i=OrdersTotal()-1; i>=0; i--) //   цикл будет работать пока не останется ордеров
     {
      if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && OrderSymbol()==Symbol() && (OrderMagicNumber()==Magic)
         && (OrderType()==OP_BUY || OrderType()==OP_SELL))
        {
         oldticket=OrderTicket();
         if(oldticket>=ticket)
           {
            ticket=oldticket;
            oldorderopenprice=OrderOpenPrice();
           }
        }
     }
   return(oldorderopenprice);
  }
//-------------------------------------------------------------------  





//+------------------------------------------------------ часть Buy      bool HLineCreate();

                            
bool HLineCreate(const long            chart_ID=0,          // ID графика
                 const string          name="Buy",          // имя линии
                 const int             sub_window=0,        // номер подокна
                 double                price1=0,            // цена линии
                 const color           clr=clrAzure,        // цвет линии
                 const ENUM_LINE_STYLE style=STYLE_DASHDOT, // стиль линии
                 const int             width=3,             // толщина линии
                 const bool            back=false,          // на заднем плане
                 const bool            selection=true,      // выделить для перемещений
                 const bool            hidden=false,        // скрыт в списке объектов
                 const long            z_order=0)           // приоритет на нажатие мышью                
    {
   if(!price1)
      price1=FindLastOrderOpenPrice();
   ResetLastError();
   if(!ObjectCreate(chart_ID,name,OBJ_HLINE,sub_window,0,price1))
     {
      Print(__FUNCTION__,
            ": не удалось создать горизонтальную линию! Код ошибки = ",GetLastError());
      return(false);
           //--- установим цвет линии
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- установим стиль отображения линии
   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- установим толщину линии
   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- отобразим на переднем (false) или заднем (true) плане
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- установим приоритет на получение события нажатия мыши на графике
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
      ChartRedraw();
     }
   return(true);
  }          
//+------------------------------------------------------------------+          HLineMove();
bool HLineMove(const long   chart_ID=0,        // ID графика
               const string name="Buy", // имя линии
               double       price1=0)          // цена линии
  {
   if(!price1)
      price1=FindLastOrderOpenPrice();
   ResetLastError();  
   if(!ObjectMove(chart_ID,name,0,0,price1))
     {
      Print(__FUNCTION__,
            ": не удалось переместить горизонтальную линию! Код ошибки = ",GetLastError());
      return(false);
     }
   return(true);
  }
//+------------------------------------------------------------------+         bool HLineDelete();
bool HLineDelete(const long   chart_ID=0,   // ID графика
                 const string name="Buy") // имя линии
  {
   ResetLastError();
   if(!ObjectDelete(chart_ID,name))
     {
      Print(__FUNCTION__,
            ": не удалось удалить горизонтальную линию! Код ошибки = ",GetLastError());
      return(false);
     }
   return(true);
  }        
//+-----------------------------------------------------------------+      





  //+-----------часть SELL                    bool HLineCreate1
  
  
  
  
  //+------------------------------------------------------    
//+------------------------------------------------------                     bool HLineCreate1();
bool HLineCreate1(const long           chart_ID=0,          // ID графика
                 const string          name="Sell",   // имя линии
                 const int             sub_window=0,        // номер подокна
                 double                price2=0,            // цена линии
                 const color           clr=clrRed,        // цвет линии
                 const ENUM_LINE_STYLE style=STYLE_DASHDOT, // стиль линии
                 const int             width=2,             // толщина линии
                 const bool            back=false,          // на заднем плане
                 const bool            selection=true,      // выделить для перемещений
                 const bool            hidden=false,        // скрыт в списке объектов
                 const long            z_order=0)           // приоритет на нажатие мышью                
    {
   if(!price2)
      price2=FindLastOrderOpenPrice();
   ResetLastError();
   if(!ObjectCreate(chart_ID,name,OBJ_HLINE,sub_window,0,price2))
     {
      Print(__FUNCTION__,
            ": не удалось создать горизонтальную линию! Код ошибки = ",GetLastError());
      return(false);
           //--- установим цвет линии
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- установим стиль отображения линии
   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- установим толщину линии
   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- отобразим на переднем (false) или заднем (true) плане
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- установим приоритет на получение события нажатия мыши на графике
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
      ChartRedraw();
     }
   return(true);
  }          
//+------------------------------------------------------------------+          HLineMove1();
bool HLineMove1(const long   chart_ID=0,         // ID графика
               const string name="Sell",         // имя линии
               double       price2=0)            // цена линии
  {
   if(!price2)
      price2=FindLastOrderOpenPrice();
   ResetLastError();  
   if(!ObjectMove(chart_ID,name,0,0,price2))
     {
      Print(__FUNCTION__,
            ": не удалось переместить горизонтальную линию! Код ошибки = ",GetLastError());
      return(false);
     }
   return(true);
  }
//+------------------------------------------------------------------+         bool HLineDelete1();
bool HLineDelete1(const long   chart_ID=0,   // ID графика
                 const string name="Sell") // имя линии
  {
   ResetLastError();
   if(!ObjectDelete(chart_ID,name))
     {
      Print(__FUNCTION__,
            ": не удалось удалить горизонтальную линию! Код ошибки = ",GetLastError());
      return(false);
     }
   return(true);
  }        

 
Артём, это для особо одарённых видео?
 
Vitaly Muzichenko:
Артём, это для особо одарённых видео?
Ну да.
 
trader781:

Пожалуйста, только я не понимаю как его проверять без загрузки себе на терминал. Тоже просьба объяснить в чем преимущество кидать сюда куски кода, забивающие страницу.

trader781, а какой собственно вопрос по коду?

Преимущество кусков кода в том, что к примеру у меня есть тестовый файл, в который нужно просто скопировать кусок кода с форума и вставить в файл. В противном случае, нужно скачивать ваш файл с кодом, потом открывать папку в папке и вставлять ваш файл, после этого его нужно удалить. Чувствуете разницу?

 
trader781:

Пожалуйста, только я не понимаю как его проверять без загрузки себе на терминал. Тоже просьба объяснить в чем преимущество кидать сюда куски кода, забивающие страницу.

Твою ж дивизию ...

Вообще-то обычно люди делают минимальный код для воспроизведения ошибки, о которой вы утверждаете.

Но, судя по коду, вы особо-то и не понимаете что он вообще делает.

У вас в функциях есть параметры, которые можно в них передавать. В частности и цвет линии. Но вы их все сделали с умолчательными значениями и не задаётесь вопросом "а что там у меня внутри функции, какие параметры она получает?", но зато начинаете говорить, что это терминал косячит. Нормально так...

Удалите все умолчательные параметры из функции, которая создаёт линию - компилятор вас заставит подумать о том, что нужно их задать при вызове функции - это нужно для вашего же образования. И уберите дублирующиеся функции - те, где в конце имени 1 вписали - используйте одну ф-цию с разными параметрами.
 
Vitaly Muzichenko:

trader781, а какой собственно вопрос по коду?

Преимущество кусков кода в том, что к примеру у меня есть тестовый файл, в который нужно просто скопировать кусок кода с форума и вставить в файл. В противном случае, нужно скачивать ваш файл с кодом, потом открывать папку в папке и вставлять ваш файл, после этого его нужно удалить. Чувствуете разницу?

ок, я понял

 

Artyom Trishkin:
Твою ж дивизию ...

 Я понимаю что в текущий момент это все далеко от приемлемого вида, но можно показать почему в случае покупки я не могу получить заданную штрих-пунктирную линию указанного цвета, хотя белую или просто зеленую он спокойно выдаст.

 

ну и  

double OP = 5.00000

  TP = (OP/100);

  Print("TP= ",TP);

2017.02.09 21:36:03.650 2015.01.05 04:00:00  martin H1-1 USDJPY,H1: TP= 0.5 

не понимаю с каких пор разделить 5 на 100 будет 0.5  

Причина обращения: