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

 
또 누가 도와줄까요?
 
Rustam Bikbulatov :
또 누가 도와줄까요?

철저한 답변과 예제를 받은 것 같지만 여전히 함수가 호출되는 방식과 static 한정자를 사용하는 이유를 이해하려면 도움말을 읽어야 합니다.

여기에 또 다른 옵션이 있습니다. 아마도 이해하기 쉬울 것입니다.

 int N( bool reset= false ) // если вызываем N() то возвращает следующее значение n++, при первом вызове n=0, но вернет 1, т.к. n=0, а затем n++, если нужно 0 то 
			// или  static int n=-1; или вызывайте сначала N(true)
  {                     // если вызываем N(true), то сбрасываем n=0 и возвращзаем 0
   static int n= 0 ;
   if (reset) n= 0 ; else n++;
   return n;
  }
 
Igor Makanu :

철저한 답변과 예제를 받은 것 같지만 여전히 함수가 호출되는 방식과 static 한정자를 사용하는 이유를 이해하려면 도움말을 읽어야 합니다.

여기에 또 다른 옵션이 있습니다. 아마도 이해하기 쉬울 것입니다.

그의 첫 번째 예에서는 위치가 취해지지 않을 때 하나의 함수 호출이 표시되고 반환된 응답의 결과가 비교됩니다.

 if ( ((OpenB- Ask )/ma+TimeB/ 60 ) > N() )

따라서 제로화 및 증가 없이 단순 리턴을 할 가치가 있습니다. 내가 가지고 있고 2가지 버전으로 구현한 것

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

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
  ButtonCreate();
  ButtonCreate( 0 , "ButtonMinor" , 0 , 10 , 60 , 50 , 50 , CORNER_LEFT_UPPER , "(i)" , "Arial" , 12 , clrBlack , C'236,233,216' , clrNONE , false , false , false , false , 0 );
  
  
     return ( INIT_SUCCEEDED );
  }

void OnTick ()
  {
  }

void OnChartEvent ( const int id,
                   const long &lparam,
                   const double &dparam,
                   const string &sparam)
  {
         if ( ObjectGetInteger ( 0 , "Button" , OBJPROP_STATE , 0 )== true ) 
          {
               int       x     =( int )lparam;
               int       y     =( int )dparam;
               datetime dt    = 0 ;
               double    price = 0 ;
               int       window= 0 ;
                         if ( ChartXYToTimePrice ( 0 ,x,y,window,dt,price))  
                         {
                         PrintFormat ( "Window=%d X=%d  Y=%d  =>  Time=%s  Price=%G" ,window,x,y, TimeToString (dt),price);
                                 if ( ChartTimePriceToXY ( 0 ,window,dt,price,x,y))
                                     PrintFormat ( "Time=%s  Price=%G  =>  X=%d  Y=%d" , TimeToString (dt),price,x,y);
                                 ChartRedraw ( 0 );
                         }
               TextCreate( 0 , "Text " + string ( MathRand ()), 0 ,dt,price, "i" , "Arial" , 10 , clrBlack , 0.0 , ANCHOR_LEFT_UPPER , false , true , false , 0 ); 
            
               TextCreate( 0 , "Text " + string ( MathRand ()), 0 ,dt,price, "ii" , "Arial" , 10 , clrBlack , 0.0 , ANCHOR_LEFT_UPPER , false , true , false , 0 ); 
          
               TextCreate( 0 , "Text " + string ( MathRand ()), 0 ,dt,price, "iii" , "Arial" , 10 , clrBlack , 0.0 , ANCHOR_LEFT_UPPER , false , true , false , 0 );
           
               TextCreate( 0 , "Text " + string ( MathRand ()), 0 ,dt,price, "iv" , "Arial" , 10 , clrBlack , 0.0 , ANCHOR_LEFT_UPPER , false , true , false , 0 ); 
             
               TextCreate( 0 , "Text " + string ( MathRand ()), 0 ,dt,price, "v" , "Arial" , 10 , clrBlack , 0.0 , ANCHOR_LEFT_UPPER , false , true , false , 0 ); 
               
               ObjectSetInteger ( 0 , "Button" , OBJPROP_STATE , False );
             }
                        
               
           if ( ObjectGetInteger ( 0 , "ButtonMinor" , OBJPROP_STATE , 0 )== true ) 
          {
               int       x     =( int )lparam;
               int       y     =( int )dparam;
               datetime dt    = 0 ;
               double    price = 0 ;
               int       window= 0 ;
                         if ( ChartXYToTimePrice ( 0 ,x,y,window,dt,price))  
                         {
                         PrintFormat ( "Window=%d X=%d  Y=%d  =>  Time=%s  Price=%G" ,window,x,y, TimeToString (dt),price);
                                 if ( ChartTimePriceToXY ( 0 ,window,dt,price,x,y))
                                     PrintFormat ( "Time=%s  Price=%G  =>  X=%d  Y=%d" , TimeToString (dt),price,x,y);
                                 ChartRedraw ( 0 );
                         }
               TextCreate( 0 , "Text " + string ( MathRand ()), 0 ,dt,price, "(i)" , "Arial" , 10 , clrBlack , 0.0 , ANCHOR_LEFT_UPPER , false , true , false , 0 ); 
            
               TextCreate( 0 , "Text " + string ( MathRand ()), 0 ,dt,price, "(ii)" , "Arial" , 10 , clrBlack , 0.0 , ANCHOR_LEFT_UPPER , false , true , false , 0 ); 
          
               TextCreate( 0 , "Text " + string ( MathRand ()), 0 ,dt,price, "(iii)" , "Arial" , 10 , clrBlack , 0.0 , ANCHOR_LEFT_UPPER , false , true , false , 0 );
           
               TextCreate( 0 , "Text " + string ( MathRand ()), 0 ,dt,price, "(iv)" , "Arial" , 10 , clrBlack , 0.0 , ANCHOR_LEFT_UPPER , false , true , false , 0 ); 
             
               TextCreate( 0 , "Text " + string ( MathRand ()), 0 ,dt,price, "(v)" , "Arial" , 10 , clrBlack , 0.0 , ANCHOR_LEFT_UPPER , false , true , false , 0 ); 
               
               ObjectSetInteger ( 0 , "ButtonMinor" , OBJPROP_STATE , False );
               
            
           }
 }
            
  
  

void OnDeinit ( const int reason)
  {
   ObjectDelete ( 0 , "Button" );
   ObjectDelete ( 0 , "ButtonMinor" );
  }
  
bool ButtonCreate( const long               chart_ID= 0 ,               // ID графика 
                   const string             name= "Button" ,             // имя кнопки 
                   const int                sub_window= 0 ,             // номер подокна 
                   const int                x= 10 ,                       // координата по оси X 
                   const int                y= 10 ,                       // координата по оси Y 
                   const int                width= 50 ,                 // ширина кнопки 
                   const int                height= 50 ,                 // высота кнопки 
                   const ENUM_BASE_CORNER   corner= CORNER_LEFT_UPPER , // угол графика для привязки 
                   const string             text= "i" ,                 // текст 
                   const string             font= "Arial" ,             // шрифт 
                   const int                font_size= 10 ,             // размер шрифта 
                   const color              clr= clrBlack ,             // цвет текста 
                   const color              back_clr= C'236,233,216' ,   // цвет фона 
                   const color              border_clr= clrNONE ,       // цвет границы 
                   const bool               state= false ,               // нажата/отжата 
                   const bool               back= false ,               // на заднем плане 
                   const bool               selection= false ,           // выделить для перемещений 
                   const bool               hidden= false ,               // скрыт в списке объектов 
                   const long               z_order= 0 )                 // приоритет на нажатие мышью 
  { 

   ResetLastError (); 

   if ( ObjectCreate (chart_ID,name, OBJ_BUTTON ,sub_window, 0 , 0 )) 
     { 
   ObjectSetInteger (chart_ID,name, OBJPROP_XDISTANCE ,x); 
   ObjectSetInteger (chart_ID,name, OBJPROP_YDISTANCE ,y); 
   ObjectSetInteger (chart_ID,name, OBJPROP_XSIZE ,width); 
   ObjectSetInteger (chart_ID,name, OBJPROP_YSIZE ,height); 
   ObjectSetInteger (chart_ID,name, OBJPROP_CORNER ,corner); 
   ObjectSetString (chart_ID,name, OBJPROP_TEXT ,text); 
   ObjectSetString (chart_ID,name, OBJPROP_FONT ,font); 
   ObjectSetInteger (chart_ID,name, OBJPROP_FONTSIZE ,font_size); 
   ObjectSetInteger (chart_ID,name, OBJPROP_COLOR ,clr); 
   ObjectSetInteger (chart_ID,name, OBJPROP_BGCOLOR ,back_clr); 
   ObjectSetInteger (chart_ID,name, OBJPROP_BORDER_COLOR ,border_clr); 
   ObjectSetInteger (chart_ID,name, OBJPROP_BACK ,back); 
   ObjectSetInteger (chart_ID,name, OBJPROP_STATE ,state); 
   ObjectSetInteger (chart_ID,name, OBJPROP_SELECTABLE ,selection); 
   ObjectSetInteger (chart_ID,name, OBJPROP_SELECTED ,selection); 
   ObjectSetInteger (chart_ID,name, OBJPROP_HIDDEN ,hidden); 
   ObjectSetInteger (chart_ID,name, OBJPROP_ZORDER ,z_order); 
      }
   return ( true ); 
 }
 
 bool TextCreate( const long               chart_ID= 0 ,               // ID графика 
                 const string             name= "Text" ,               // имя объекта 
                 const int                sub_window= 0 ,             // номер подокна 
                 datetime                 time= 0 ,                   // время точки привязки 
                 double                   price= 0 ,                   // цена точки привязки 
                 const string             text= "Text" ,               // сам текст 
                 const string             font= "Arial" ,             // шрифт 
                 const int                font_size= 10 ,             // размер шрифта 
                 const color              clr= clrBlack ,             // цвет 
                 const double             angle= 0.0 ,                 // наклон текста 
                 const ENUM_ANCHOR_POINT anchor= ANCHOR_LEFT_UPPER , // способ привязки 
                 const bool               back= false ,               // на заднем плане 
                 const bool               selection= true ,           // выделить для перемещений 
                 const bool               hidden= true ,               // скрыт в списке объектов 
                 const long               z_order= 0 )                 // приоритет на нажатие мышью 
  { 

   ResetLastError (); 

   if ( ObjectCreate (chart_ID,name, OBJ_TEXT ,sub_window,time,price)) 
     { 
   ObjectSetString (chart_ID,name, OBJPROP_TEXT ,text); 
   ObjectSetString (chart_ID,name, OBJPROP_FONT ,font); 
   ObjectSetInteger (chart_ID,name, OBJPROP_FONTSIZE ,font_size); 
   ObjectSetDouble (chart_ID,name, OBJPROP_ANGLE ,angle); 
   ObjectSetInteger (chart_ID,name, OBJPROP_ANCHOR ,anchor); 
   ObjectSetInteger (chart_ID,name, OBJPROP_COLOR ,clr); 
   ObjectSetInteger (chart_ID,name, OBJPROP_BACK ,back); 
   ObjectSetInteger (chart_ID,name, OBJPROP_SELECTABLE ,selection); 
   ObjectSetInteger (chart_ID,name, OBJPROP_SELECTED ,selection); 
   ObjectSetInteger (chart_ID,name, OBJPROP_HIDDEN ,hidden); 
   ObjectSetInteger (chart_ID,name, OBJPROP_ZORDER ,z_order); 
     }
   return ( true ); 
 } 



  
  

되는 Expert Advisor를 작성하고 싶습니다. 이제 EA는 버튼 대신에 텍스트를 생성합니다.

 

안녕하세요, 수동으로 Buystop 보류 주문 을 끌 때 다른 Sellstop 보류 주문이 함께 이동하도록 하려면 어떻게 해야 합니까?

하나를 이동하면 즉시 둘 다 이동하도록 서로 바인딩하는 방법은 무엇입니까?

 


Здравствуйте. У меня алгоритм такой 
//----------------------------------------------------------------------------
if (CountBuy() == 0)
{

BuySignal = h1; tttp=1; 
if (BuySignal > 0 && tttp==1 && h2>0)
{
CloseSell();
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))
{

SL = NormalizeDouble(Ask-StopLoss*Point, Digits);

TP = NormalizeDouble(Ask+TakeProfit*Point, Digits);

res = OrderModify(OrderTicket(), OrderOpenPrice(), SL, TP, 0);
if (!res)

Print("Ошибка модификации ордера на покупку, ASK=" + DoubleToStr(Ask) + ", SL=" + DoubleToStr(SL) + ", TP=" + DoubleToStr(TP)); 
}
}
}
}
if (CountSell() == 0)
{
SellSignal= l1; tttp=-1;
if (SellSignal > 0 && tttp==-1 && l2>0)
{
CloseBuy();
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, comment, Magic, 0, Red);
if (ticket > 0)
{
if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))
{
SL = NormalizeDouble(Bid+StopLoss*Point, Digits);
TP = NormalizeDouble(Bid-TakeProfit*Point, Digits);
res = OrderModify(OrderTicket(), OrderOpenPrice(), SL, TP, 0);
if (!res)
Print("Ошибка модификации ордера на продажу, BID=" + DoubleToStr(Bid) + ", SL=" + DoubleToStr(SL) + ", TP=" + DoubleToStr(TP)); 
}
}
}
}
} 
//------------------------------------------------------------------------------------------
Пытаюсь сделать, чтоб условия на открытие ордера проверялось бы через какое-то кол-во баров, а так сразу открывается другой ордер
 
Carcass77 :

왜 스팸인가?

 
Konstantin Nikitin :

왜 스팸인가?

여러 주제로 무엇을 썼습니까? 제거할 수 있습니다
 
Ihor Herasko :

틱을 작성하고 전략 테스터 로 대체하십시오.

인사말. 문제가 무엇이며 해결 방법을 알려주십시오.

테스트를 위해 1, 2, 3 및 여섯 번째 숫자에 대해 역사상 여러 개의 양초를 변경했습니다.

테스트할 때 두 번째 것은 처리하고 세 번째는 처리하지 않고 그린 다음 Stop Out으로 인해 오류가 중지된 상태로 중지됩니다.



 

안녕하세요

나는 매우 간단한 상황을 가지고 있지만 그것을 해결할 수 없습니다.

내가 뭘 잘못하고 있는지 말해주세요:

문제: iCustom을 통해 사용자 지정 지표 (i-DRP...)를 EA(DR 테스트)에 연결할 수 없습니다.

미리 감사합니다