전문 고문 - 기타 질문 - 페이지 10

 
//+------------------------------------------------------------------+
//|                                                     Stoploss.mq4 |
//|      Copyright 2016, Marco vd Heijden, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Marco vd Heijden, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create object
   BitmapLabelCreate(
                     0,                     // chart's ID
                     "BmpLabel",            // label name
                     0,                     // subwindow index
                     20,                    // X coordinate
                     20,                    // Y coordinate
                     "\\Images\\on.bmp",    // image in On mode
                     "\\Images\\off.bmp",   // image in Off mode
                     0,                     // visibility scope X coordinate
                     0,                     // visibility scope Y coordinate
                     0,                     // visibility scope shift by X axis
                     0,                     // visibility scope shift by Y axis
                     0,                     // pressed/released
                     CORNER_LEFT_UPPER,     // chart corner for anchoring
                     ANCHOR_LEFT_UPPER,     // anchor type
                     clrRed,                // border color when highlighted
                     STYLE_SOLID,           // line style when highlighted
                     1,                     // move point size
                     false,                 // in the background
                     false,                 // highlight to move
                     true,                  // hidden in the object list
                     0);                    // priority for mouse click

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

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(ObjectGetInteger(0,"BmpLabel",OBJPROP_STATE)==true)
     {
      Print("Stoploss active");
      // Do Something...
     }

   if(ObjectGetInteger(0,"BmpLabel",OBJPROP_STATE)==false)
     {
      Print("Stoploss inactive");
      // Do Something...
     }
  }
//+------------------------------------------------------------------+
//| Create Bitmap Label object                                       |
//+------------------------------------------------------------------+
bool BitmapLabelCreate(const long              chart_ID=0,               // chart's ID
                       const string            name="BmpLabel",          // label name
                       const int               sub_window=0,             // subwindow index
                       const int               x=0,                      // X coordinate
                       const int               y=0,                      // Y coordinate
                       const string            file_on="",               // image in On mode
                       const string            file_off="",              // image in Off mode
                       const int               width=0,                  // visibility scope X coordinate
                       const int               height=0,                 // visibility scope Y coordinate
                       const int               x_offset=10,              // visibility scope shift by X axis
                       const int               y_offset=10,              // visibility scope shift by Y axis
                       const bool              state=false,              // pressed/released
                       const ENUM_BASE_CORNER  corner=CORNER_LEFT_UPPER, // chart corner for anchoring
                       const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, // anchor type
                       const color             clr=clrRed,               // border color when highlighted
                       const ENUM_LINE_STYLE   style=STYLE_SOLID,        // line style when highlighted
                       const int               point_width=1,            // move point size
                       const bool              back=false,               // in the background
                       const bool              selection=false,          // highlight to move
                       const bool              hidden=true,              // hidden in the object list
                       const long              z_order=0)                // priority for mouse click
  {
//--- reset the error value
   ResetLastError();
//--- create a bitmap label
   if(!ObjectCreate(chart_ID,name,OBJ_BITMAP_LABEL,sub_window,0,0))
     {
      Print(__FUNCTION__,
            ": failed to create \"Bitmap Label\" object! Error code = ",GetLastError());
      return(false);
     }
//--- set the images for On and Off modes
   if(!ObjectSetString(chart_ID,name,OBJPROP_BMPFILE,0,file_on))
     {
      Print(__FUNCTION__,
            ": failed to load the image for On mode! Error code = ",GetLastError());
      return(false);
     }
   if(!ObjectSetString(chart_ID,name,OBJPROP_BMPFILE,1,file_off))
     {
      Print(__FUNCTION__,
            ": failed to load the image for Off mode! Error code = ",GetLastError());
      return(false);
     }

   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);         //--- set label coordinates
   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
   ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);         //--- set visibility scope for the image; if width or height values
   ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
   ObjectSetInteger(chart_ID,name,OBJPROP_XOFFSET,x_offset);    //--- set the part of an image that is to be displayed in the visibility scope
   ObjectSetInteger(chart_ID,name,OBJPROP_YOFFSET,y_offset);
   ObjectSetInteger(chart_ID,name,OBJPROP_STATE,state);         //--- define the label's status (pressed or released)
   ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);       //--- set the chart's corner, relative to which point coordinates are defined
   ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);       //--- set anchor type
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);           //--- set the border color when object highlighting mode is enabled
   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);         //--- set the border line style when object highlighting mode is enabled
   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,point_width);   //--- set a size of the anchor point for moving an object
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);           //--- display in the foreground (false) or background (true)
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);//--- enable (true) or disable (false) the mode of moving the label by mouse
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);       //--- hide (true) or display (false) graphical object name in the object list
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);      //--- set the priority for receiving the event of a mouse click in the chart
   return(true);                                                //--- successful execution
  }
//+------------------------------------------------------------------+
 
//+------------------------------------------------------------------+
//|                                                     Stoploss.mq4 |
//|      Copyright 2016, Marco vd Heijden, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Marco vd Heijden, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property strict

bool use_stoploss; // stoploss flag
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- create object
   BitmapLabelCreate(
                     0 ,                     // chart's ID
                     "BmpLabel" ,             // label name
                     0 ,                     // subwindow index
                     20 ,                     // X coordinate
                     20 ,                     // Y coordinate
                     "\\Images\\on.bmp" ,     // image in On mode
                     "\\Images\\off.bmp" ,   // image in Off mode
                     0 ,                     // visibility scope X coordinate
                     0 ,                     // visibility scope Y coordinate
                     0 ,                     // visibility scope shift by X axis
                     0 ,                     // visibility scope shift by Y axis
                     0 ,                     // pressed/released
                     CORNER_LEFT_UPPER ,     // chart corner for anchoring
                     ANCHOR_LEFT_UPPER ,     // anchor type
                     clrRed ,                 // border color when highlighted
                     STYLE_SOLID ,           // line style when highlighted
                     1 ,                     // move point size
                     false ,                 // in the background
                     false ,                 // highlight to move
                     true ,                   // hidden in the object list
                     0 );                     // priority for mouse click

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

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//--- check stoploss
   CheckStoplossState();
  
   if (use_stoploss== 0 )
    {
     // Do something...
    }
  
   if (use_stoploss== 1 )
    {
     // Do Something else...
    }
  }
//+------------------------------------------------------------------+
//| Check Stoploss state                                             |
//+------------------------------------------------------------------+
void CheckStoplossState()
  {
   if ( ObjectGetInteger ( 0 , "BmpLabel" , OBJPROP_STATE )== true )
     {
       if (use_stoploss== 0 )
        {
         Alert ( "Stoploss active" );
         use_stoploss= 1 ;
        }
     }
   if ( ObjectGetInteger ( 0 , "BmpLabel" , OBJPROP_STATE )== false )
     {
       if (use_stoploss== 1 )
        {
         Alert ( "Stoploss inactive" );
         use_stoploss= 0 ;
        }
     }
  }
//+------------------------------------------------------------------+
//| Create Bitmap Label object                                       |
//+------------------------------------------------------------------+
bool BitmapLabelCreate( const long               chart_ID= 0 ,               // chart's ID
                       const string             name= "BmpLabel" ,           // label name
                       const int                sub_window= 0 ,             // subwindow index
                       const int                x= 0 ,                       // X coordinate
                       const int                y= 0 ,                       // Y coordinate
                       const string             file_on= "" ,               // image in On mode
                       const string             file_off= "" ,               // image in Off mode
                       const int                width= 0 ,                   // visibility scope X coordinate
                       const int                height= 0 ,                 // visibility scope Y coordinate
                       const int                x_offset= 10 ,               // visibility scope shift by X axis
                       const int                y_offset= 10 ,               // visibility scope shift by Y axis
                       const bool               state= false ,               // pressed/released
                       const ENUM_BASE_CORNER   corner= CORNER_LEFT_UPPER , // chart corner for anchoring
                       const ENUM_ANCHOR_POINT anchor= ANCHOR_LEFT_UPPER , // anchor type
                       const color              clr= clrRed ,               // border color when highlighted
                       const ENUM_LINE_STYLE    style= STYLE_SOLID ,         // line style when highlighted
                       const int                point_width= 1 ,             // move point size
                       const bool               back= false ,               // in the background
                       const bool               selection= false ,           // highlight to move
                       const bool               hidden= true ,               // hidden in the object list
                       const long               z_order= 0 )                 // priority for mouse click
  {
//--- reset the error value
   ResetLastError ();
//--- create a bitmap label
   if (! ObjectCreate (chart_ID,name, OBJ_BITMAP_LABEL ,sub_window, 0 , 0 ))
     {
       Print ( __FUNCTION__ ,
             ": failed to create \"Bitmap Label\" object! Error code = " , GetLastError ());
       return ( false );
     }
//--- set the images for On and Off modes
   if (! ObjectSetString (chart_ID,name, OBJPROP_BMPFILE , 0 ,file_on))
     {
       Print ( __FUNCTION__ ,
             ": failed to load the image for On mode! Error code = " , GetLastError ());
       return ( false );
     }
   if (! ObjectSetString (chart_ID,name, OBJPROP_BMPFILE , 1 ,file_off))
     {
       Print ( __FUNCTION__ ,
             ": failed to load the image for Off mode! Error code = " , GetLastError ());
       return ( false );
     }

   ObjectSetInteger (chart_ID,name, OBJPROP_XDISTANCE ,x);         //--- set label coordinates
   ObjectSetInteger (chart_ID,name, OBJPROP_YDISTANCE ,y);
   ObjectSetInteger (chart_ID,name, OBJPROP_XSIZE ,width);         //--- set visibility scope for the image; if width or height values
   ObjectSetInteger (chart_ID,name, OBJPROP_YSIZE ,height);
   ObjectSetInteger (chart_ID,name, OBJPROP_XOFFSET ,x_offset);     //--- set the part of an image that is to be displayed in the visibility scope
   ObjectSetInteger (chart_ID,name, OBJPROP_YOFFSET ,y_offset);
   ObjectSetInteger (chart_ID,name, OBJPROP_STATE ,state);         //--- define the label's status (pressed or released)
   ObjectSetInteger (chart_ID,name, OBJPROP_CORNER ,corner);       //--- set the chart's corner, relative to which point coordinates are defined
   ObjectSetInteger (chart_ID,name, OBJPROP_ANCHOR ,anchor);       //--- set anchor type
   ObjectSetInteger (chart_ID,name, OBJPROP_COLOR ,clr);           //--- set the border color when object highlighting mode is enabled
   ObjectSetInteger (chart_ID,name, OBJPROP_STYLE ,style);         //--- set the border line style when object highlighting mode is enabled
   ObjectSetInteger (chart_ID,name, OBJPROP_WIDTH ,point_width);   //--- set a size of the anchor point for moving an object
   ObjectSetInteger (chart_ID,name, OBJPROP_BACK ,back);           //--- display in the foreground (false) or background (true)
   ObjectSetInteger (chart_ID,name, OBJPROP_SELECTABLE ,selection); //--- enable (true) or disable (false) the mode of moving the label by mouse
   ObjectSetInteger (chart_ID,name, OBJPROP_SELECTED ,selection);
   ObjectSetInteger (chart_ID,name, OBJPROP_HIDDEN ,hidden);       //--- hide (true) or display (false) graphical object name in the object list
   ObjectSetInteger (chart_ID,name, OBJPROP_ZORDER ,z_order);       //--- set the priority for receiving the event of a mouse click in the chart
   return ( true );                                                 //--- successful execution
  }
//+------------------------------------------------------------------+

또는 자체적으로 함수 에 넣을 수 있습니다.

OnTick() 함수에 넣었지만 결국 타이머 함수에서 실행하고 싶을 수도 있습니다. 왜냐하면 이제 상태를 변경하기 위해 틱을 받아야 하고 새 틱이 도착하기 전에 주문하면 여전히 이전 틱이 있기 때문입니다. 바람직하지 않을 수 있지만 다시 타이머가 테스터에서 작동하지 않으므로 테스트 목적으로 더 좋지만 결국 타이머 기능에서 상태를 전환하는 것이 훨씬 더 빠르고 시장이 닫히고 들어오는 틱이 없을 때도 작동합니다. 왜 그것이 작동하지 않는지 스스로에게 묻고 싶지 않기 때문에 들어오는 틱이 없기 때문이라는 것을 기억하십시오.

 
Marco vd Heijden :
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//--- check stoploss
   CheckStoplossState();
  
   if (use_stoploss== 0 )
    {
     // Do something...
    }
  
   if (use_stoploss== 1 )
    {
     // Do Something else...
    }
  }
//+------------------------------------------------------------------+
//| Check Stoploss state                                             |
//+------------------------------------------------------------------+
void CheckStoplossState()
  {
   if ( ObjectGetInteger ( 0 , "BmpLabel" , OBJPROP_STATE )== true )
     {
       if (use_stoploss== 0 )
        {
         Alert ( "Stoploss active" );
         use_stoploss= 1 ;
        }
     }
   if ( ObjectGetInteger ( 0 , "BmpLabel" , OBJPROP_STATE )== false )
     {
       if (use_stoploss== 1 )
        {
         Alert ( "Stoploss inactive" );
         use_stoploss= 0 ;
        }
     }
  }

또는 자체적으로 함수 에 넣을 수 있습니다.

OnTick() 함수에 넣었지만 결국 타이머 함수에서 실행하고 싶을 수도 있습니다. 왜냐하면 이제 상태를 변경하기 위해 틱을 받아야 하고 새 틱이 도착하기 전에 주문하면 여전히 이전 틱이 있기 때문입니다. 바람직하지 않을 수 있지만 다시 타이머가 테스터에서 작동하지 않으므로 테스트 목적으로 더 좋지만 결국 타이머 기능에서 상태를 전환하는 것이 훨씬 더 빠르고 시장이 닫히고 들어오는 틱이 없을 때도 작동합니다. 왜 그것이 작동하지 않는지 스스로에게 묻고 싶지 않기 때문에 들어오는 틱이 없기 때문이라는 것을 기억하십시오.

이봐, 나는 아직 시도하지 않았다. 나는 당신의 2 개의 코멘트가 내 EA 코드의 그 부분을 끝낼 것이라고 생각합니다.
큰 감사, 당신은 나를 올바르게 이해하고 있습니다.

 

한 번 더 감사합니다. 당신의 큰 도움으로 내 문제를 해결합니다.


OnTick() 대신 OnChartEvent() 사용할 수 있습니까?
나는 이미 시도했지만 아직 아무런 문제가 보이지 않지만 OnTick() 함수를 사용했습니다. 단지 확인하고 싶습니다.

@ Marco 는 이미지 위치에 문제가 있는지 묻고 싶습니다. Off ( / False / 1 ) Stop Loss가 활성화되고 On ( / True / 0 ) Stop Loss가 비활성화되기 때문입니다. (저는 아무 것도 변경하고 싶지 않습니다. 이 비트맵은 저에게 매우 위험합니다. 농담이 아닙니다. 여전히 시간이 오래 걸리는 것 같습니다.)
또한 시도 하기 전에 물어볼 필요가 있습니다 . Bitmap Label Object의 전역 변수 에 대해 사용할 특정 사항이 있습니까? (내 질문 이유는 Bitmap Label Object가 다른 것과 상당히 다른 것이 필요하다는 것을 알았습니다... 등등)

미리 감사드립니다.

 

아니요, 문서를 따르기만 하면 됩니다.

그리고 예, OnChartEvent()에서 사용할 수 있지만 클릭할 때 한 번만 실행되기 때문에 예를 들어 trailingstop 코드를 포함할 수 없음을 기억하십시오.

비트맵 문제의 경우 폴더로 이동하여 이름을 onOLD로 변경한 다음 off의 이름을 on으로 변경한 다음 onOLD의 이름을 off로 변경하면 두 파일의 이름을 변경하여 문제를 해결할 수 있습니다.

또는 아래 버튼을 사용할 수 있습니다.

더 작은 것이 필요하면 크기를 조정할 수도 있습니다.

파일:
onoff.zip  1 kb
 
Marco vd Heijden :

이름이 바뀌면 저에게 효과적이지만 코드에서 올바르게 작동하기 때문에 다시 한 번 확인할 것입니다.

전역 변수: 아래 코드와 같이 시도했지만 전역 변수 창에 표시해도 결과가 없습니다.

//---Global Variables
use_stoploss_gv = _Symbol + "test BmpLabel GV" ;

if ( GlobalVariableCheck ( use_stoploss_gv ) == true )
{
    use_stoploss = GlobalVariableGet ( use_stoploss_gv );
}
else
{
     GlobalVariableSet ( use_stoploss_gv, use_stoploss );
}

당신은 나를 위해 많은 것을 만들어 냈습니다. 큰 감사합니다.

 
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {

//---Global Variables
   string use_stoploss_gv= _Symbol + "test BmpLabel GV" ;

   if ( GlobalVariableCheck (use_stoploss_gv)== true )
     {
      use_stoploss= GlobalVariableGet (use_stoploss_gv);
       Print (use_stoploss_gv, " Exists" );
     }
   else
     {
       GlobalVariableSet (use_stoploss_gv,use_stoploss);
       Print (use_stoploss_gv, " Created" );
     }

   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+


작동하는 것 같습니다.

 

Marco vd Heijden :  

작동하는 것 같습니다.

그러나 마지막 변경 사항은 저장하지 않습니다.
예: 차트에 추가한 다음 '켜기'로 전환한 다음 다른 시간 프레임으로 전환하면 '끄기'가 반환되며 정상이 아닙니다.

그리고 완벽하게 작동하는 다른 기능 'Lot, Stop Loss, Take Profit'에 글로벌 변수를 사용하고 있지만 이 Bitmap Label 은 작동하지 않습니다.
이 비트맵 레이블 문제를 해결하는 방법에 대해 조언을 주거나 저를 도와주세요.

고마워요.

 

아래 코드는 당신이 나를 도운 후에 완벽하게 작동합니다. 감사합니다.

그리고 나는 당신이 말한대로 이름을 바꿨습니다. 잘 작동하지만 궁금한 점이 있습니다 . 내가 뭔가 잘못하고 있습니까?
(그냥 걱정 된다)

// function order sell
void ordersell()
{
    CheckStopLossState();

     if ( use_stoploss == 0 )
    { sl = Bid + points_to_change( stoploss * 10 ); }

     if ( use_stoploss == 1 )
    { sl = 0 ; }

     OrderSend ( ... sl, ... );
     return ;
}

미리 감사드립니다.

 
설계된대로 작동하면 아무 잘못도하지 않는 것이 간단합니다. 그렇지 않으면 단순히 작동하지 않습니다.