MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 118

 
trader781 :
Artyom, 위의 코드를 던졌습니다.
어디에? 다음은 내가 답장을 보내는 게시물의 링크입니다. . 닉네임 옆에 재고 있습니다.

위에서 던진 코드와 동일한 링크를 복사하여 참가자의 메시지를 참조할 때 메시지에 붙여넣습니다. 그리고 그가 어디에 있는지, 무엇에 대해 알지 못하고 그를 찾는 것이 그렇게 많은 것을 원합니까?
 
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 );
  }        

 
Artyom Trishkin :
여기에 삽입 :
Artyom, 이것은 특히 재능있는 비디오를위한 것입니까?
 
Vitaly Muzichenko :
Artyom, 이것은 특히 재능있는 비디오를위한 것입니까?
네, 그렇습니다.
 
trader781 :

제 단말기에 다운받지 않고 확인하는 방법을 저만 이해가 안가네요. 또한 페이지를 막히는 코드 조각을 여기에 던지면 어떤 이점이 있는지 설명하십시오.

trader781 , 코드에 대한 실제 질문은 무엇입니까?

코드 조각의 장점은 예를 들어 포럼에서 코드 조각을 복사하여 파일에 붙여넣기만 하면 되는 테스트 파일이 있다는 것입니다. 그렇지 않으면 코드 파일을 다운로드한 다음 폴더 내의 폴더를 열고 파일을 붙여넣은 다음 삭제해야 합니다. 차이를 느껴봐?

 
trader781 :

제 단말기에 다운받지 않고 확인하는 방법을 저만 이해가 안가네요. 또한 페이지를 막히는 코드 조각을 여기에 던지면 어떤 이점이 있는지 설명하십시오.

당신의 부서 ...

일반적으로 사람들은 귀하가 주장하는 오류를 재현하기 위해 최소한의 코드를 만드는 것이 일반적입니다.

그러나 코드로 판단하면 그것이 하는 일을 전혀 이해하지 못합니다.

함수에 전달할 수 있는 매개변수가 있습니다. 특히, 선의 색상. 그러나 당신은 그것들을 모두 기본값으로 했고 "함수 내부에 무엇이 있고 어떤 매개변수를 받는가?"라는 질문을 스스로에게 하지 말고 대신 이 터미널이 엉망이라고 말하기 시작합니다. 평범해서...

라인을 생성하는 함수에서 모든 기본 매개변수를 제거합니다. 컴파일러는 함수를 호출 할 때 설정해야 할 사항에 대해 강제로 생각하게 합니다. 이는 자신의 교육에 필요합니다. 이름 끝에 1이 입력된 중복 함수를 제거하고 매개변수가 다른 하나의 함수를 사용하십시오.
 
Vitaly Muzichenko :

trader781 , 코드에 대한 실제 질문은 무엇입니까?

코드 조각의 장점은 예를 들어 포럼에서 코드 조각을 복사하여 파일에 붙여넣기만 하면 되는 테스트 파일이 있다는 것입니다. 그렇지 않으면 코드 파일을 다운로드한 다음 폴더 내의 폴더를 열고 파일을 붙여넣은 다음 삭제해야 합니다. 차이를 느껴봐?

알았어 알았어

Artyom Trishkin :
너의 부서...

현재로서는 이것이 모두 허용 가능한 형식과 거리가 멀다는 것을 이해하지만 구매의 경우 침착하게 흰색 을 내더라도 지정된 색상의 점선을 얻을 수 없는 이유를 알 수 있습니다. 또는 그냥 녹색.

두 배 OP = 5.00000

TP = (OP/100);

Print("TP= ",TP);

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

5를 100으로 나누면 0.5가 되기 때문에 이해가 되지 않습니다.