記事"ビジュアルストラテジービルダー。 プログラミングなしでトレーディングロボットを作成する"についてのディスカッション - ページ 6

 
Andrey Barinov:
...

将来のバージョンではホイールスクロールを追加するつもりですが...。

ホイールスクロールを実装した経験を共有したいと思います。もしかしたら、私の技術はあなたには合わないかもしれないが、(まだ実装方法を決めていないのであれば)正しいアイデアを与えてくれるかもしれない。

条件のOnChartEvent()関数の内部で:

if(id == CHARTEVENT_CHART_CHANGE && !a)

1.ChartNavigate関数を使い、現在のチャートを-100本後ろの位置に設定する。

2.ChartGetInteger(0,FIRST_VISIBLE_BAR)を使って、最初の可視バーの数を 静的変数 "First_bar_number "にセットする。

3.次に、チャート・イベントCHARTEVENT_CHART_CHANGEを一旦固定する(このためにフラグ "a "とフラグ "b "を使う)。

4.Number_of_the_first_bar "と "Number_of_this_bar"(これもChartGetInteger(0,FIRST_VISIBLE_BAR)で取得するが、"Number_of_the_first_bar "のように一度ではなく、CHARTEVENT_CHART_CHANGEイベントごとに取得する)を比較し、チャートのシフト方向を決定する。

チャート・シフトの方向を決定する。

5.次に、ObjectSetInteger(0,G_CORE[CANVAS][_NAME],OBJPROP_YOFFSET,G_CORE[CANVAS][_FIELD_TO_VIEW_Y_DISTANCE])でカンバス画像を移動し、チャートを 元の位置に戻します;

6.次のチャート・イベントは、呼び出されたChartNavigate 関数から生成されるのでスキップします。この繰り返しです。

これがそのコードです:

 if(id == CHARTEVENT_CHART_CHANGE && !a)
   {
    //------------------------------------ 
    if(!Номер_первого_бара)
      {
       ChartNavigate(0,CHART_END,-100); 
       Номер_первого_бара = ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR);
      }
    //------------------------------------ 
    Номер_этого_бара = ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR);
    //------------------------------------
    if(Номер_этого_бара > Номер_первого_бара)
      {
       Прокрутка_вниз = 1;
       Прокрутка_вверх = 0;
       Сдвиг = 25;
       a = 1;
      }
    if(Номер_этого_бара  < Номер_первого_бара) 
      {
       Прокрутка_вниз = 0;
       Прокрутка_вверх = 1;
       Сдвиг = -25;
       a = 1;
      }
    //------------------------------------
    G_CORE[КАНВАС][_IMAGE_VIRTUAL_Y] -= Сдвиг;
    //------------------------------------ 
    G_CORE[КАНВАС][_FIELD_TO_VIEW_Y_DISTANCE] = G_CORE[Поле_обзора][_Y] - G_CORE[КАНВАС][_IMAGE_VIRTUAL_Y];  
    //------------------------------------
    ObjectSetInteger(0,G_CORE[КАНВАС][_NAME],OBJPROP_YOFFSET,G_CORE[КАНВАС][_FIELD_TO_VIEW_Y_DISTANCE]);
    //------------------------------------    
  }
//------------------------------------------------------
if(b){a = 0; b = 0;} 
if(a == 1){ChartNavigate(0,CHART_END,-100);  b = 1;} 
//------------------------------------------------------

この方法の欠点は、バックグラウンドのチャートがぴくぴく動くことです。しかし、あなたのコンストラクタはその可視部分をすべて占有するので、目立ちません。

この方法の利点は、ウィンドウズのスクロールに劣らない、ホイールによる優れたスクロールが得られることである。エネルギー、減速...また、水平スクロールバーにカーソルを合わせてホイールをスクロールさせると、水平スクロールバーが出てくる。これは簡単だ。

このスクロールで、ユーザーはワインドアップで作業しているように感じるでしょう)。

こんな感じです: https://www.mql5.com/ru/forum/139237/page7

 
Реter Konow:

ホイールによるスクロールを実装した経験を共有したいと思います。もしかしたら、私の技術はあなたには合わないかもしれませんが、(まだ実装方法を決めていないのであれば)正しいアイデアを与えてくれるかもしれません。

OnChartEvent()関数の中で:

1.ChartNavigate関数を使って、現在のチャートを-100本後ろの位置に設定する。

2.ChartGetInteger(0,FIRST_VISIBLE_BAR)を使って、最初の可視バーの数を 静的変数 "First_bar_number "にセットする。

3.次に、チャート・イベントCHARTEVENT_CHART_CHANGEを一旦固定する(このためにフラグ "a "とフラグ "b "を使う)。

4.Number_of_the_first_bar "と "Number_of_this_bar"(これもChartGetInteger(0,FIRST_VISIBLE_BAR)で取得しますが、"Number_of_the_first_bar "のように一度ではなく、各CHARTEVENT_CHART_CHANGEイベントで取得します)を比較します。

そして、チャートのシフト方向を決定します。

5.次に、ObjectSetInteger(0,G_CORE[CANVAS][_NAME],OBJPROP_YOFFSET,G_CORE[CANVAS][_FIELD_TO_VIEW_Y_DISTANCE])を使用して、カンバス画像を移動します;

6.次のチャート・イベントは、呼び出されたChartNavigate 関数から生成されるのでスキップします。この繰り返しです。

これがそのコードです:

この方法の欠点は、バックグラウンドのチャートが動いてしまうことだ。しかし、あなたのコンストラクタはその可視部分をすべて占めているので、目立つことはないだろう。

この方法の利点は、ウィンドウズのスクロールに劣らない優れたホイール・スクロールが得られることだ。エネルギー、減速...。また、水平スクロールバーにカーソルを合わせてホイールをスクロールさせると、水平スクロールバーが出てくる。これは簡単だ。

このスクロールで、ユーザーはワインドアップで作業しているように感じるだろう)。

こんな感じです: https://www.mql5.com/ru/forum/139237/page7

ありがとう。

CHARTEVENT_MOUSE_WHEELはどうしたのですか?

https://www.mql5.com/ja/docs/constants/chartconstants/enum_chartevents&nbsp;

Документация по MQL5: Константы, перечисления и структуры / Константы графиков / Типы событий графика
Документация по MQL5: Константы, перечисления и структуры / Константы графиков / Типы событий графика
  • www.mql5.com
Существуют 11 видов событий, которые можно обрабатывать с помощью функции предопределенной функции OnChartEvent(). Для пользовательских событий предусмотрено 65535 идентификаторов в диапазоне от CHARTEVENT_CUSTOM до CHARTEVENT_CUSTOM_LAST включительно. Для генерации пользовательского события необходимо использовать функцию EventChartCustom...
 
Andrey Barinov:

ありがとう。

CHARTEVENT_MOUSE_WHEELはどうしたのですか?

https://www.mql5.com/ja/docs/constants/chartconstants/enum_chartevents&nbsp;

ホイールでスクロールをしたときは、まだありませんでした。だから、試してもいない。(それに、まだMT4でやっていて、そこでは使えないようです)。

それはエネルギーと減速を与えるのですか?

 
Реter Konow:

ホイールでスクロールしたときは、まだそこになかった。だから試さなかったんだ。(それに、僕はまだMT4で仕事をしていて、そこでは使えないようだ)。

エネルギーと減速を与えるのですか?

試したことがないのでわかりません。ただ、そういうイベントがあったことだけは覚えている。

 

こんにちは。

私はこの製品とそれに関する記事が存在するNEOPROGRAMMISTです。

教育目的で、例1(高速MAと低速MAの交差)のExpert Advisorを再現しようとしました。記事と同じように、一文字ずつすべて行いました。その結果、Expert Advisorは複数のポジションを建ててすぐに決済し、即座に損失を出すことがありました。また、あるときは1つのポジションをオープンし、すべてその通りにして、反対のシグナルが届いたときにクローズすることもある。少なくともこれらについてはすべてがうまくいっているように思えたが、私はそれらが常にバイだけであることに気づいた。

スキームは、コンピュータ(夜に更新)を再起動した後に溶解したので、私は可能なエラーを見つけることができない、コードはまだ弱く、それはとても大きく、理解できないです。

コードを見て、私が間違ったことをしたのか提案していただけますか?

ファイル:
 
Andrey Barinov:

試したことがないからわからない。ただ、そういうイベントがあることだけは覚えている。

イベントはあるが、まだ誰も使っていない)。

チャートがピクピク動くので、この方法をやめたいのですが、MT4にはこのイベントがなく、MT5にはまだその仕組みがわかっていません......。

 
 
Sergey Voytsekhovsky:

こんにちは。

私は、この製品とそれに関する記事が存在するNEOPROGRAMMISTです。

教育目的で、例1(高速MAと低速MAの交差)のExpert Advisorを再現しようとしました。記事と同じように、一文字ずつすべて行いました。その結果、Expert Advisorは複数のポジションを建ててすぐに決済し、即座に損失を出すことがありました。また、あるときは1つのポジションをオープンし、すべてその通りにして、反対のシグナルが届いたときにクローズすることもある。少なくともこれらについては、すべてがうまくいっているように思えたが、常に「買い」しかないことに気づいた。

スキームは、コンピュータ(夜に更新)を再起動した後に溶解したので、私は可能なエラーを見つけることができない、コードはまだ弱く、それはとても大きく、理解できないです。

コードを見直して、何が間違っているのか指摘していただけませんか?

まずパターン#1から見てください。これは記事で検討されているパターンとまったく同じです(TravellingとLosslessだけが追加されています)。すべてのエレメントのパラメーターを見ることができますし、それらを使って遊ぶこともできます。

あなたのExpert Advisorにはいくつかのエラーがあります。そのうちの1つは、売上を上げるための要素で取引の種類を変更していないことです(売上ではなく「購入」と表示されています)。

 
Andrey Barinov:

まずはパターン#1から勉強してみよう。これはまさにこの記事で検討されているスキームである(トラベリングとブレークイーブンのみが追加されている)。すべての要素のパラメーターを見ることができ、それらを使って遊ぶことができる。

あなたのExpert Advisorにはいくつかのエラーがあります。そのうちの1つは、販売を行うための要素で取引の種類を変更していないことです(販売の代わりに「購入」と書かれています)。

ありがとうございます。ご回答の迅速さに大変驚きました。

トランザクションの種類が変更されていないことについては理解しています。

しかし、0.5秒の間に、どうやら1ティックごとに、一連の注文が一度に開かれ、閉じられ、買い注文と売り注文の両方があるのは、どこが間違っているのでしょうか????

 
Sergey Voytsekhovsky:

迅速な対応にとても驚いています。

トランザクションの種類が変更されていないことについては理解しています。

しかし、0.5秒の間に、どうやらティックごとに、一連の注文がオープンされ、すぐにクローズされ、買い注文と売り注文の両方が存在するのは、どこが間違っているのでしょうか????

ほら、売りの代わりに買いが入っている。同時に、売りシグナルが出たら、買いは決済されるはずだ!そうです。

売りシグナルが出ると、ロボットは間違えて売りの代わりに買いを建ててしまい、すぐに決済し、また建てて決済する。

そうでなければ、あなたのスキームはすべて正しい。