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

 
#ストップロス、テイクプロフィット-ドラッグ-オープン

私の最新のコメント以来、私は研究フォーラムとストップロスとテイクプロフィットのための記事 - オブジェクトのドラッグを開始しました。
私はちょうどこの記事MQL5 COOKBOOKを 見つけました。典型的なチャートイベントの処理
しかし、それはMT5用です。

そこで、その記事を読み始めたり、試したりする前に、その記事はMT4にも有用なのかどうか教えてください。
また、可能であれば、オブジェクトのドラッグのための良い記事を共有してください。

事前にありがとうございました。
 
はい、OnChartEvent()はどちらの言語でも同じです。
 
Marco vd Heijden:
はい、OnChartEvent()はどちらの言語でも同じです。
おお!知ってよかった、読み始められます。
どうもありがとうございました。
 

また、MT5用に書かれたコードの多くが、現在MT4でも動作することがわかりました。

私は過去にいろいろなことを試しましたが、1年前には動かなかったものが今は動くので、これは彼らがまだ両方の言語を活発に開発していることを表しています。

 
Marco vd Heijden:

また、MT5用に書かれたコードの多くが、現在MT4でも動作することがわかりました。
私は過去にいろいろなことを試しましたが、1年前には動かなかったものが今は動くので、これは彼らがまだ両方の言語を活発に開発していることを表しています。

それは嬉しいことです。MT4の言語がすぐに使えなくなるのではと、いつも考えて(/心配して)います。ありがとうございます。
 
// I say Once ' Do not turn... ' for ' if ' operator - this is good.
if  ( Morning || Midnight )
{
    // Do not turn on light just for today...
}

// I say Twice ' Do not turn... ' for ' switch ' operator - Q: Can I say ' Once '?
switch ( Today )
{
    case    Morning  :    // Do not turn on light just for today...
    break;
    case    Midnight :    // Do not turn on light just for today...
    break;
}   //---switch Close
ありがとうございました。
 

私はすでに記事を読み、そこから使用する方法を'CHARTEVENT_OBJECT_DRAG'の他の人のコードをチェックアウトしました。
しかし、残念ながら、それは私のために感覚を作ることはありません。今になって、私は無駄なことに時間を費やしてしまったと思います。なぜなら、彼らのコードスタイルは私のとは全く異なるからです。
(私のコードスタイルはシンプルで、mql4ドキュメントのコードスタイルのように、もう少し理解できます。)

ストップロス、テイクプロフィット、ペンディングオーダーのオブジェクトをドラッグすると、そのオブジェクトと一緒に移動することができるようになりました。(もちろん、これらはすべて別々でもかまいません。)

また、注文を修正するEAスクリプト(sl, tpなど)を見たのですが、「CHARTEVENT_OBJECT_DRAG」なしで動作していました...私は、あなたが私が何を意味するか知っていることを望みます。

今、私は、HLineやTrendlineオブジェクトを使った' CHARTEVENT_OBJECT_DRAG ' の簡単な例だけでも教えて欲しいのです。または、明確な説明や何か良い(/より明確に)コメント。
私はすでに多くの時間を費やしたし、私はまだそれについて研究しています。私はすぐに答えを得ることを望みます。

よろしくお願いします。
ありがとうございました。

 
// I say Once ' Do not turn... ' for ' if ' operator - this is good.
if  ( Morning || Midnight )
{
    // Do not turn on light just for today...
}

これは本当のことです 朝 OR 夜中

// I say Twice ' Do not turn... ' for ' switch ' operator - Q: Can I say ' Once '?
switch ( Today )
{
    case    Morning  :    // Do not turn on light just for today...
    break;
    case    Midnight :    // Do not turn on light just for today...
    break;
}   //---switch Close

これは、モーニングのケースとミッドナイトのケースが別々になっています。

つまり、これらは2つの異なるものです。

Max Enrik:

CHARTEVENT_OBJECT_DRAG'の使い方については、既に記事を読み、他の方のコードも確認しました。
しかし、残念ながら、それは私には意味がありません。今思うと、無駄なことに時間を費やしていたんだなと思います。なぜなら、彼らのコードスタイルは私のとは全く異なるからです。
(私のコードスタイルはシンプルで、mql4ドキュメントのコードスタイルのように、もう少し理解できます。)

ストップロス、テイクプロフィット、ペンディングオーダーのオブジェクトをドラッグすると、そのオブジェクトと一緒に移動することがあります。(もちろん、全部別々でもいいんですけどね。)

また、あるEAスクリプトで、注文の変更(sl, tpなど)をするのを見たのですが、「CHARTEVENT_OBJECT_DRAG」なしで動作していました...私が言っていることがお分かりになると思います。

今、私は、HLineやTrendlineオブジェクトを使った' CHARTEVENT_OBJECT_DRAG ' の簡単な例だけでも教えてほしいのです。または、明確な説明や何か良い(/より明確に)コメント。
私はすでに多くの時間を費やしたし、私はまだそれについて研究しています。私はすぐに答えを得ることを望みます。

よろしくお願いします。
ありがとうございました。


というときに、線を引くことができます。

OBJPROP_SELECTABLE ==1
OBJPROP_SELECTED ==1

どちらもその通りだし、その値を読み込むのは簡単よ。

ObjectGet Double(....

の代わりに

ObjectSetDouble(....
難しいことではなく、とても便利な機能です。
 
Marco vd Heijden:

ストップロスや テイクプロフィットの ドラッグのコードをどう書けばいいのか、ほとんどわからなかったのですが、どうもありがとうございました。
ありがとうございます。

マーケットクローズ

ということで、すでに試してみたところ、「OBJPROP_PRICE」は欲しいものが取得できるようになりました。
HLineオブジェクトをドラッグしてPrint()すると、1秒に1回更新されます。これは、EventSetTimer( 1 ) を使っているからです。

しかし、私はPrint()が1秒に1回更新されないようにする必要があります。私は、ドラッグを停止した後、Print()が更新されるようにしたいのです。
もし、あなたが私を理解しているならば、私を助けるか、私に助言を与えてください。

よろしくお願いします。

 

そこで、OBJPROP_PRICEの値をdoubleに格納し、両者を比較することができます。

もし両者が違えば、ドラッグが開始されたことを意味し、もし両者が等しければ、ドラッグが停止されたことを意味します。

//+------------------------------------------------------------------+
//|                                                   Drag Hline.mq4 |
//|      Copyright 2017, Marco vd Heijden, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, Marco vd Heijden, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

double price; // price variable;
bool drag;     // drag flag
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer
   EventSetTimer(1);
//--- create Hline
   ObjectCreate(0,"line",OBJ_HLINE,0,0,Ask);
//--- store value
   price=ObjectGetDouble(0,"line",OBJPROP_PRICE,0);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();

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

  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//--- compare values
   if(price!=ObjectGetDouble(0,"line",OBJPROP_PRICE,0))
     {
      drag=1;                                          // set drag flag
      price=ObjectGetDouble(0,"line",OBJPROP_PRICE,0); //store new value
     }
   if(drag==1)
     {
      if(price==ObjectGetDouble(0,"line",OBJPROP_PRICE,0))
        {
         drag=0; //reset drag flag
         Alert(" New value set: ", DoubleToString(price));
        }
     }
  }
//+------------------------------------------------------------------+

あるいは、ドラッグが検出された時点でカウンターをスタートさせるなど、いろいろな方法があります。