エキスパートアドバイザー - 雑多な質問 - ページ 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() 関数を使用して、私はちょうど約確認したいです。

Off( / False / 1 ) の時はストップロスが有効で、On( / True / 0 ) の時はストップロスが無効になるので、@Marco さんにお聞きしたいのですが、画像の場所について何か問題があるのでしょうか?( ただ、私は何も変更したくない、このビットマップは私にとって非常に危険です、冗談ではない - 私はそれがまだ私から長い時間を取る参照してください)
また、 ビットマップラベルオブジェクトの グローバル 変数について、使うべき特定の ものがあるかどうか、試す前に聞いて おく必要があります。( 私の質問理由は、Bitmap Label Objectは他のものとは全く異なるものが必要だと思うからです...など)

ありがとうございました。

 

いいえ、ドキュメントに従うだけです。

OnChartEvent()の中で使用することは可能ですが、例えばtrailingstopのようなコードを含めることはできないことを覚えておいてください。

ビットマップの問題については、フォルダに移動して、onを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: 

動作しているように見えます。

しかし、それは最後の変更を保存しません。
例:チャートに追加して、それを'On'にして、他のタイムフレームに切り替えると、'Off'になってしまう、これは正常ではありません。

また、他の機能であるロット、ストップロス、テイクプロフィットにはグローバル変数を使っていますが、このビットマップラベルは うまくいきません。
どうか、この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;
}

事前にありがとうございました。

 
設計通りに動くのであれば、何も間違っていないことになりますし、そうでなければ、単に動かないということになります。