MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1280

 

みなさん、こんにちは。

1)EAをコンパイルした。

2) テスターで実行する。

3) ログには3つのエントリーがあります。

2020.10.25 20:06:08.484 2020.09.24 00:00:00 OVERLOAD テストを開始しました。

2020.10.25 20:06:07.015 TestGenerator: 現在のスプレッド7を使用。
2020.10.25 20:05:51.296 Expert UPDATE GBPUSD,M1: ロードに成功しました。


4)ビジュアライゼーションが定着する。

どんな論理的なミスがあったとしても、例えば取引は実行されませんが、テスターはバーのカウントを開始するはずです。しかし、チャートはフリーズして静止している。

他のExpert Advisorもいくつか試しましたが、すべて動作します。

これを実行すると、すべてが停止する。

このような問題を抱えた方はいらっしゃいますか?どうすれば直るのか?

 
Andrey Ilinykh:

計算した値をログや ファイルに書き出すと、どのような効果があるのでしょうか?

エラーを発見し、アルゴリズムを形成する。

 
Alexey Viktorov:

まあ、タンジェントで角度を計算すればいいんだけどね。また、角度そのものは必要なく、タンジェントがあればいいのです。

接線はどんな場合でも、1時間あたり1キロメートル、1マイルあたり1点、1日あたり1000点で、それが速度になる。グラフの次元。そして、その上の接線は、縦軸と横軸の次元に結びついた角度である。ここからが本番です。

 
Aleksei Stepanenko:

はい、今回もスピードは単位のみ:pips/minです。土日や穴については、私が決めたことですが、チャート上にローソクがあるものが時間間隔、ないもの(日/時間)は存在しないことになります。なぜなら、土日を考慮し、その時間帯に価格が据え置かれると、理由もなく速度が著しく低下してしまうからです。でも、それは人それぞれですからね......。)

なぜ、スピードを恐れるのか種類を与えるのは、あくまで慣例です。
角度定義機能のバリエーションとして。

struct PointPriceTime
  {
   double            price;
   datetime          time;
                     PointPriceTime(double p, datetime t) { price=p; time=t; };
   void              Set(double p, datetime t){ price=p; time=t;};
                     PointPriceTime(PointPriceTime &p){ price=p.price; time=p.time; };
                     PointPriceTime() { price=0.0; time=0; };
  };

double Angle(PointPriceTime &p1,PointPriceTime &p2) // возвращает угол в градусах в приведенной системе координат price-price, где по оси X 
  {                                                 // расстояние между x1 и  x2  = N*_Point, где N - количество минутных баров во временном промежутке отрезка. 
   static int tf[9]= {PERIOD_M1,PERIOD_M5,PERIOD_M15,PERIOD_M30,PERIOD_H1,PERIOD_H4,PERIOD_D1,PERIOD_W1,PERIOD_MN1};
   int i=0;
   while(i<9 && SeriesInfoInteger(_Symbol,tf[i],SERIES_FIRSTDATE)>p1.time)
      i++;
   if(i==9)
     {
      Print("Время левой границы вне диапазона исторических данных");
      return DBL_MAX;
     }
   int bar1 = iBarShift(_Symbol,tf[i],p1.time);
   int bar2 = iBarShift(_Symbol,tf[i],p2.time);
   if(bar1==bar2)
      return 0.0;
   return atan((p2.price-p1.price)/((bar1-bar2)*PeriodSeconds(tf[i])*_Point/60))*180/M_PI;
  }

MT5以降、MT4の使用感がとにかくひどい。歴史へのアクセスは、どこかemasculatedなのです。ダニの話でもないんですけどね。



ファイル:
Angle.mq4  11 kb
iCanvas.mqh  49 kb
 

チャート上のトレードレベルの記述をプログラムで管理することは可能でしょうか。MQL4ツールを使って、(チャート上に取引レベルを残したまま)無効にしたり、変更したりすることは可能でしょうか?


いくつかの取引レベルを視覚的にマークし、独自の説明を付ける必要があります。そのために、トレードレベルに似たスタイルで色が異なる水平線を作成し、それらに説明(OBJPROP_TEXT)を設定し、チャート上にオブジェクトの説明を表示するようにします(ChartSetInteger(0,CHART_SHOW_OBJECT_DESCR,true))。この場合、私が作成した説明文がスクリーンショットに表示されているものと重なってしまい、結果的にどちらも読み取れなくなってしまいます。

ターミナルで作成される取引レベルの記述を無効にしたり、変更したりすることは可能ですか?これらの記述は、MQLプログラムからアクセス可能ですか?

 
Janis Ozols:

チャート上のトレードレベルの記述をプログラムで管理することは可能でしょうか。MQL4ツールを使って、(チャート上に取引レベルを残したまま)無効にしたり、変更したりすることは可能でしょうか?


いくつかの取引レベルを視覚的にマークし、独自の説明を付ける必要があります。そのために、トレードレベルに似たスタイルで色が異なる水平線を作成し、それらに説明(OBJPROP_TEXT)を設定し、チャート上にオブジェクトの説明を表示するようにします(ChartSetInteger(0,CHART_SHOW_OBJECT_DESCR,true))。この場合、私が作成した説明文がスクリーンショットに表示されているものと重なってしまい、結果的にどちらも見分けがつかなくなってしまうのです。

ターミナルで作成される取引レベルの記述を無効にしたり、変更したりすることは可能ですか?これらの記述は、MQLプログラム内からアクセス可能ですか?

はい、あります。

のチェックをはずす。

1

 
Alekseu Fedotov:

できます。
チェックを外してください。

このボックスをオフにすると、取引レベル(ライン)そのものが、その説明とともにチャートから消えます。

この質問によって、私は線を削除したいのではなく、チャートからその記述を変更または削除するだけでよいことを強調したかったのです(スクリーンショットの矢印で示されている)。

 
Janis Ozols:

このボックスをオフにすると、 取引レベル(ライン)は説明とともにチャートから消えます。

この質問によって、私は線を削除したいのではなく、チャートからその記述を変更または削除するだけでよいことを強調したかったのです(スクリーンショットの矢印で示されている)。

必要ない、そういうところにラインを作るのです

 
Vitaly Muzichenko:

必要ない、そういうところに自分のラインを作るんです。

既存のレベルの一部(スクリーンショットの例では 一番上のレベル)だけを強調し、他はそのままにしておきたいのです。

もし、プログラム的にこれらのレベルの説明にアクセスすることが不可能であれば、おそらく、レベル自体を無効にし、各ティックポールで、適切なレベルを別の色で強調表示し、別の説明を提供することによって、ターミナルが独立してそれらを描画するようにしなければならないでしょう。また、オープン レベルだけでなく、ストップロスやテイクプロフィットも描かなければならない。

もしかして、取引レベルの記述を無効にする(行だけ残す)とか、変更するとか、もっと些細な方法があるのでしょうか?

 

これらの機能の違いは何なのか、わかりやすく説明してください。

//+------------------------------------------------------------------+
int    CountOrder(int Order_Type) 
   {
    int Orders=0;
    for(int a=OrdersTotal()-1;a>=0;a--)
    {
     if(OrderSelect(a, SELECT_BY_POS, MODE_TRADES)==false) continue;
     if(OrderSymbol()!=_Symbol) continue;
     if(Order_Type == OrderType() || Order_Type == -1) Orders++;
    }
    return Orders;
   }
//+------------------------------------------------------------------+
int CounterOrderTradeType(ENUM_ORDER_TYPE order_type)
  {
   int cnt=0;
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
      if(OrderSelect(pos,SELECT_BY_POS)==true)
         if(OrderSymbol()==_Symbol)
            if(OrderType()==order_type)
               cnt++;
   return (cnt);
  }
//+------------------------------------------------------------------+