エキスパートアドバイザー - 雑多な質問 - ページ 11

 
Max Enrik:

以下のコードは、あなたが私を助けてくれた後、完全に動作します。

そして、私はあなたが言ったように名前を変更し、それは良い動作しますが、ちょうど私が疑問に思っている、私は何か間違ったことをやっているのでしょうか?
( ただ、私は心配 です )

自分のコードが動くかどうか心配するのは、ごく普通のことです(実際、それは健全なことです)。よくあるのは、コンパイルはできるけど、やりたいことができないコードです(ヒューマンエラーや知識不足のため)。

一番良い方法は、変数を出力し、リターンコードをチェック する習慣を身につけることです。一度テストしたら、print文を削除することができます。

上記のコードスニペットを使って、単純なPrint("SL value:" +sl) を追加し、Expertログをチェックして、値が期待通りかどうかを確認することができます。

 
Max Enrik: ただ、疑問に思うのは、私が何か間違った ことをしているのだろうかということです。
    { sl = Bid + points_to_change( stoploss * 10 ); }
なぜ10倍しているのですか?ストップロスが pips単位なら、pips_to_changeで 変換して、4桁のブローカーで動作するようにする。
 
Marco vd Heijden:
デザイン通りに動けば問題ないのですが、そうでなければ単純に動かないということです。

#チェックマーク - 終了

そうなんです。このビットマップラベルには 長い時間がかかりました。やっと、欲しいものが手に入りました...。
もちろん、巨大な男、あなたの助けをいただきありがとうございます。

私は以下のようなコードで問題を解決しています。

void ordersell()
{
    //  Sell set Stop Loss with bitmap label
    
    // when bitmap label shows - ON
    if ( ObjectGetInteger( 0, "bitmap label on off", OBJPROP_STATE ) == true )
    {
        sl = Bid + points_to_change( stoploss * 10 );
        Print( " | TRUE :  Active | ", "Bid: ", Bid, " | ", "Stop Loss: ", sl );
    }

    // when bitmap label shows - OFF
    if ( ObjectGetInteger( 0, "bitmap label on off", OBJPROP_STATE ) == false )
    {
        sl = 0;
        Print( " | FALSE :  Inactive | ", "Bid: ", Bid, " | ", "Stop Loss: ", sl );
    }

    // call your stop loss 'sl'
    ticket = OrderSend( ..., sl, ... );
    // sounds
    if ( ticket > 0 )
    { PlaySound( "ok.wav"      ); } else
    { PlaySound( "timeout.wav" ); }
    return;
}
 
honest_knave:

一番良い方法は、変数をプリントしてリターンコードをチェックする習慣を身につけることです。一度テストしたら、printステートメントを削除することができます。
上のあなたのコードスニペットを使って、シンプルにPrint("SL value:" +sl) を追加して、Expertログをチェックして、期待通りの値になっているかどうかを確認することができます。

私はすでにこれを使用していますが、時々自分のコードを疑うことがあります。私の#Checkmark 問題を チェックして いただければ、より明確に理解して いただけると思います。
とにかく
、お時間をいただきありがとうございました。

 
whroeder1:
なぜ10倍しているのですか?もしストップロスが pips単位なら、pips_to_changeで 変換して、4桁のブローカーで動作するようにします。

あ!そうだ、いい質問だ!もう変えたんだ。ご清聴 ありがとうございました。

 

#ストップロス/テイクプロフィット-クローズド

より明確な コメントをありがとうございます。
これからもよろしくお願いします。

Marco vd Heijden 氏に感謝します。

 

#Ctrl + マウスボタン - 開く

私は数時間を費やして、どのように私はそれについて良いドキュメントを見つけることができますし、私はそれのための良い情報やドキュメントを得ることができません。
私はちょうど私が0.1によって 増加するロット サイズのために'左マウス+ Ctrl'をクリックしたときに必要です。(通常は0.01 増加します)。

それに関するドキュメントや例のある記事を探したいのですが。

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

 
Max Enrik:

#Ctrl + マウスボタン - 開く

私は数時間を費やして、どのように私はそれについて良いドキュメントを見つけることができますし、私はそれのための良い情報やドキュメントを得ることができません。
私はちょうど私が0.1によって 増加するロット サイズのための'左マウス+ Ctrl'をクリックすると必要です。(通常は0.01 増加します)。

私はそれについての例とドキュメントや記事を見つけたい。

よろしくお願いします。

キーの組み合わせをトラップする簡単な方法を私は知りません。0.01ではなく0.1だけ増やしたい場合にクリックする2つ目のボタンがあるとよいでしょう。

とはいえ、次のようなことを試してみてはいかがでしょうか。

最後のイベントがキーストロークCTRLであったかどうかをチェック する。

もしそうなら、このイベントがマウスクリックであるかどうかをチェックする。

しかし、この方法にはいくつかの問題があります。

1.キーストロークとマウスクリックの間に他の チャートイベントが発生した場合、失敗します。

2.2. マウスをクリックしてからCTRLキーを離すまでの間に遅延が発生するため、オーバーランが発生する。これに対する回避策は、それぞれの問題を引き起こすでしょう。

おそらく、他の人がもっと良いアイデアを持っていることでしょう。

#define CTRL 17

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
   static bool wasCTRL=false;
   if(wasCTRL && id==CHARTEVENT_CLICK) Print("CTRL+CLICK detected");
   wasCTRL=(id==CHARTEVENT_KEYDOWN && lparam==CTRL);
  }
 
//+------------------------------------------------------------------+
//|                                                      keydown.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 ctrl_click;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer
   EventSetTimer(60);

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

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---

  }
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {

   if(id==CHARTEVENT_CLICK)
     {
      //Print("CLICK");
      ctrl_click=1;
     }

   if(id==CHARTEVENT_KEYDOWN)
     {
      //Print(lparam);// print to identify keycode

      if(lparam==17)  // ctrl key
        {
         if(ctrl_click==1)// if mouse click
           {
            //Do Something when CTRL (keycode 17) is pressed
            Print("CTRL+CLICK");
            ctrl_click=0;  // reset
           }
        }
       ctrl_click=0; // reset if not ctrl
     }
  }
//+------------------------------------------------------------------+
 

そうですね。

微妙に違うトホホ。