English Русский 中文 Español Deutsch Português
怠惰は進歩への誘因である半自動マーキングテンプレート

怠惰は進歩への誘因である半自動マーキングテンプレート

MetaTrader 4 | 22 4月 2016, 10:55
1 070 0
Vladimir
Vladimir

はじめに

マーキングはどれもチャート上の極値を決定し、ユーザー定義の数値やこれらポイントを基にしたラインを作成します。エリオット波動を支持する人は、特定の波と結論(それがどの波か)をマークする必要があり、それで数などを決定します。ウルフ波動を支持する人はトレンドラインを引き、目標値を示す必要があります。『蝶』はポイントと、ガートレイによって形式化される将来の蝶、カニ、その他の図を決めるレベルが必要です。

この方法を好む人にはマレーレベルが必要です。自動計算では、特殊なソフトウェアがない限り、何百、何千の形成に関与することができません。一方、だれもが、条件形式化方法の結果の自動マーキングのデメリットを知ります。そして、必ずしもソフトウェアがわれわれにマーキング過程での干渉を許可するわけではありません。マニュアルでマーキングを行うことやさらにデータ処理を行うコンピュータに対する課題は、ユーザーの能力を広げます。



トレードテンプレートの半自動マーキング

例として、ウルフ波動のマーキングを考察します。(説明はリンダ・ラシュキの著名な書籍 『魔術師リンダ・ラリーの短期売買入門』 から取られています。)

波動構造のビルの理論は、ニュートンの物理の第一法則に基づいています。作用あれば反作用あり。この動きは貴重な予測機能を持つ一定の波を作り出します。この波はよい変動があるとき、もっとも明確に設定されます。

バーチャートの一番上か一番下から始め、新しい波でカウントを始めることが保証されています。このカウントは買い設定に対するものです。一番上でカウントを始めます。(波のカウントは、売りの設定を求めて一番下から始めた場合は逆向きです。

  1. 第2波は一番上です。
  2. 第3波は最初の下落の一番下です。
  3. 第1波は第2派(一番上)に先行する底です。ポイント3はポイント1より低くなります。
  4. 第4波は第3波のトップです。第4波ポイントは第1波の底より高くなります。
  5. トレンドラインはポイント1からポイント3に引かれます。この線の延長は第5波とよぶ予想反転ポイントまで達すると予想されます。これは EPA ライン(1~4)へに乗るためのエントリーポイントです。
  6. 到来時の推定価格(EPA)はポイント1から4に描かれるトレンドラインです。これは予想価格目標を投影します。われわれの初期ストップは、ポイント5で新たに形成される反転のちょうど下に設定されます。それはそのごすばやくとんとんまで移動します。

重要ポイント:ポイント1、2、3、4 が形成されるまでウルフ波動を探し始めることはできません。

ポイント3は買い設定についてポイント1より低いことを念頭に置きます。売り設定ではポイント1より高くなります。また、ベストは波ではポイント4は買い設定でポイント1より高くなり、売り設定では低くなります。これで絶対暴走市場条件が存在しないことが確証されます。例を調べ、みなさんがウルフ波動設定を見始める目を訓練できるか確認します。

提示例はウルフ波動が形成し始めるときどのように見えるか示しています。ポイント1、2、3はすでに形成されています。ポイント2は重大な低いまたは高いスウィングのはずです。それからポイント1と3の間にトレンドラインが描かれます。これはポイント5を予想する場所で投影されます。

ポイント5が形成されます。この領域から逆に買い、下に厳格なストップを設定します。ポイント1からポイント4にトレンドラインを引いたら、それは価格予測を出します。

ポイント2はパターンに対する初期開始ポイントです。私はつねにこのポイントからカウントし始めるのがもっとも簡単だと思っています。それから、遡ってポイント1と3を見つけます。ポイント4がポイント1より高くなることを忘れないでください。われわれのトレンドライはポイント5を投影して描かれます。市場はこのレベルでサポートを見つけます。よって市場にロングポジションでエンターし、ポイント5のちょうど下にストップを設定します。市場はその目標のためにトレードします。


添付の説明によると、特殊な記号(1~5の数字、そのあと4と5ポイントを通過するポイント1からトレンドラインを描きます)でマーキングをする必要があります。

マニュアル手法では、テキストオブジェクトが作成され、チャートの指定ポイントに割り当てられます。それからトレンドラインが作成され、チャートに置かれます。プログラム言語の特性により、過程を簡素化してオブジェクト作成とプロセスからのトレンドライン描画を予想することができます。この方法で、ユーザーはマークをチャート上の特定のポイントに割り当て、トレンドラインの既製描画を取得します。


われわれにはチャートに情報を入れる方法が2つあります。

第1の方法は、テキストオブジェクトがチャートの特定のポイントに割りあtられるとき、第2の方法は売ンディンががチャートのうぃのづの特定のポイントに割り当てられるときです。

これら特性を利用して異なるオブジェクトを作成します。すでに適用されているオブジェクトとすでに描かれている線を削除し、ウィンドウの特定のポイントにバインディングするために『OnOff』ボタンを作成します。そして、チャート上の指定のポイントにバインディングされるオブジェクトを作成します。チャートが再スケーリングされ、オブジェクトがチャートと共に移動する可能性があることに配慮して、チャートのゼロバーの右に対ポイントの初期位置を決めます。この位置をトレンドライン描画関数のアクティブ化および非アクティブ化の位置とします。

// Check the presence of the "OnOff" button, create it in case of absence
int    obj_total=ObjectsTotal();
  string index;
  for( i=0;i<obj_total;i++)
    {
     index=ObjectName(i);
      string Lbl = StringSubstr (index, 0, 12);
            if (Lbl == "Lable_On_Off") string LblOnOff=index;
     }
if (LblOnOff!="Lable_On_Off") OnOff(Red, 10);

ここで、

OnOff(Red, 10);

は『OnOff』ボタンを作成し配置する関数です。

void OnOff (color clr_, int h)
         {                                      
         ObjectCreate("Lable_On_Off",OBJ_LABEL,0,0,0);// Creation of the "OnOff" button
         ObjectSetText("Lable_On_Off",CharToStr(204) , 12, "Wingdings", clr_);
         ObjectSet(   "Lable_On_Off", OBJPROP_CORNER, 3);     // The angle of displaying on the chart
         ObjectSet(   "Lable_On_Off", OBJPROP_XDISTANCE, 10);
         ObjectSet(   "Lable_On_Off", OBJPROP_YDISTANCE, h);
         } 
return;

埋め込み関数

CharToStr()

によりチャート

"Wingdings"上に

シンボルのコードを入力するだけでオブジェクトを表示することができます。

『OnOff』ボタンを選択し上に移動することでインディケータをアクティブ化します。移動し、チャートの最初のティックが来ると、ボタンは別の位置に割り当てられ、その色をグリーンに変えます。そうするとオブジェクトを最初のバー:関数によるチャート上の列挙に対する桁、の右に表示します。

ボタンの位置に応じて、チャート上のオブジェクトを管理します。

// Check if the "OnOff" button is at its place
   
if (ObjectGet("Lable_On_Off",OBJPROP_XDISTANCE)>70||
    ObjectGet("Lable_On_Off",OBJPROP_YDISTANCE)<20)// if it is not there then
       { 
          OnOff(Red, 10);// we move the "OnOff" button to its place and delete all marks, channel, trend line
         for ( i=0; i<point_kol; i++)
            ObjectDelete("Lable_"+i);
            ObjectDelete("TRDLine");
            ObjectDelete("FIBOCanal");
         return;
         }  
                                               
if (ObjectGet("Lable_On_Off",OBJPROP_YDISTANCE)>10 && 
    ObjectGet("Lable_On_Off",OBJPROP_YDISTANCE)!=40) //If the button is moved upwards then
       {  
         OnOff(Green, 40); // we fix it up there
         CreatePoint();   // Create points
       }

ここで、


CreatePoint();

はチャート上で計算されたポイントの初期ポジショニング関数です。


void CreatePoint ()
      {
      double shcala=(WindowPriceMax()-WindowPriceMin());
      for( i = 0; i < point_kol; i++) // Create points
               {                                      
      ObjectCreate("Lable_"+i, OBJ_ARROW, 0,Time[Bars-1],Bid);
      ObjectSet("Lable_"+i,OBJPROP_ARROWCODE,140+i);
      ObjectSet("Lable_"+i,OBJPROP_WIDTH,2);
      ObjectSet("Lable_"+i,OBJPROP_COLOR,Green);
      ObjectMove("Lable_"+i, 0,(Time[0]+Period()*720), (WindowPriceMin()+shcala/2)-shcala/12*i);
               } 
      }

ここで、マーキングをする場合、3ポイントのみアクティブであるため、チャートに適用するためにいくつのポイントを使用するべきか、3または5か、選択できるよう、外部変数を追加したことに注意をしていただきたいと思います。デフォルト値は5ですが、視覚的に自分にとっての中間ポイントを記し、私は3を使いました。

extern int point_kol=5;

推定される価格変動を指し示すトレンドラインの代わりにフィボチャンネルを使用します。それはチャート上に拡大ガイダンスを提供します。チャンネルはフィボレベルのサポートおよびレジスタンスレベルに関するガイダンスを提供します。この表現で、トレンドラインとフィボレベルの交点にある目標値を観察することができます。それにより特定のトレーディング戦術を振り当てることができます。


以下はそれの記述です。

インディケータをオンにし、ボタンを上側に移動します。

日次チャートポイントおよびトレンドラインとフィボチャンネルを作成したインディケータを設定します。



おわりに

チャート上でのこの種の情報表示により、たとえばエリオット波動による分析を実装することができます。マニュアルで2つの極値点を決め、短い期間のタイムフレームで内部波動を再計算し、指定条件と比較するさらなる分析に役立つ結果を取得します。そこで、ユーザーは再計算の明示的な値(インパルスまたは修正)を指定することができるのです。

ここで、MQL4 言語の開発者の方々にチャートに直接バインディングするためのピクセル表示のオブジェクトのウィンドウポジショニングを再計算する関数を追加していただきたいと思います。重要な点は、現時点で、user32.dll ライブラリにアクセスし、現行ウィンドウのパラメータをそこから呼び出す提案の方法は user32.dll が不在であるメッセージを表示するということです。これは、Windows XP や MetaTrader 4 の一般的配布にはそのような機能がないことを意味します。この実装で、マニュアルでポイントを移動しない場合のい、チャート全体を通して分析を行う機能の実装を拒まねばなりませんでした。


以下はインディケータ自体です(ソースコード)。

//|                                                 0_CTL.mq4 |
//|                                   Copyright © 2008, b2w@narod.ru |
//|                                             http://www.fibook.ru |
//+------------------------------------------------------------------+
#property copyright "b2w@narod.ru"
#property link      "http://www.fibook.ru"
#property indicator_chart_window
extern int point_kol=5;
string mon[]={"january", 
              "february", 
              "march", 
              "april", 
              "may", 
              "june", 
              "july", 
              "august", 
              "september", 
              "october", 
              "november", 
              "december"};
int i;
double coordinatsT[5], coordinatsP[5];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
  string info="Marking  "+ Symbol()+" by "+Day()+" "+mon[Month()-1]+" "+Year()+" г."; 
   CreateUp (info);
 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
//----
 
// Check the presence of the "OnOff" button, create it in case of absence
int    obj_total=ObjectsTotal();
  string index;
  for( i=0;i<obj_total;i++)
    {
     index=ObjectName(i);
      string Lbl = StringSubstr (index, 0, 12);
            if (Lbl == "Lable_On_Off") string LblOnOff=index;
     }
if (LblOnOff!="Lable_On_Off") OnOff(Red, 10);  
// Check if the "OnOff" button is at its place
   
if (ObjectGet("Lable_On_Off",OBJPROP_XDISTANCE)>70||
    ObjectGet("Lable_On_Off",OBJPROP_YDISTANCE)<20)// if it is not there then
       { 
          OnOff(Red, 10);// we move the "OnOff" button to its place and delete all marks, channel, trend line
         for ( i=0; i<point_kol; i++)
            ObjectDelete("Lable_"+i);
            ObjectDelete("TRDLine");
            ObjectDelete("FIBOCanal");
         return;
         }  
                                               
if (ObjectGet("Lable_On_Off",OBJPROP_YDISTANCE)>10 && 
    ObjectGet("Lable_On_Off",OBJPROP_YDISTANCE)!=40) //If the button is moved upwards then
       {  
         OnOff(Green, 40); // Fix it up there
         CreatePoint();   // Create points
       }  
         
           for (i=0; i<point_kol; i++)
               {   
                 coordinatsT[i]=ObjectGet("Lable_"+i,OBJPROP_TIME1); // Read the coordinates
                 coordinatsP[i]=ObjectGet("Lable_"+i,OBJPROP_PRICE1);
               }   
     
         // if all points are carried to the chart then we draw the additional objects
         if  ((coordinatsT[0]<Time[0])&&
              (coordinatsT[1]<Time[0])&&
              (coordinatsT[2]<Time[0])&&
              (coordinatsT[3]<Time[0])&&
              (coordinatsT[4]<Time[0]))  
            {
            ObjectCreate("TRDLine", OBJ_TREND, 0,0,0);
            ObjectCreate("FIBOCanal", OBJ_FIBOCHANNEL, 0,0,0);
            ObjectMove ("TRDLine", 0,coordinatsT[0],coordinatsP[0]);
            ObjectMove ("TRDLine", 1,coordinatsT[point_kol-2],coordinatsP[point_kol-2]);
            ObjectMove ("FIBOCanal", 0,coordinatsT[0],coordinatsP[0]);
            ObjectMove ("FIBOCanal", 2,coordinatsT[point_kol-2],coordinatsP[point_kol-2]);
            ObjectMove ("FIBOCanal", 1,coordinatsT[point_kol-1],coordinatsP[point_kol-1]);
            }
   return(0);
  }
//+------------------------------------------------------------------+
 
void OnOff (color clr_, int h)
         {                                      
         ObjectCreate("Lable_On_Off",OBJ_LABEL,0,0,0);// Creation of the "OnOff" button
         ObjectSetText("Lable_On_Off",CharToStr(204) , 12, "Wingdings", clr_);
         ObjectSet(   "Lable_On_Off", OBJPROP_CORNER, 3);     // The angle of displaying on the chart
         ObjectSet(   "Lable_On_Off", OBJPROP_XDISTANCE, 10);
         ObjectSet(   "Lable_On_Off", OBJPROP_YDISTANCE, h);
         } 
return;          
 
void CreatePoint ()
      {
      double shcala=(WindowPriceMax()-WindowPriceMin());
      for( i = 0; i < point_kol; i++) // Create points
               {                                      
      ObjectCreate("Lable_"+i, OBJ_ARROW, 0,Time[Bars-1],Bid);
      ObjectSet("Lable_"+i,OBJPROP_ARROWCODE,140+i);
      ObjectSet("Lable_"+i,OBJPROP_WIDTH,2);
      ObjectSet("Lable_"+i,OBJPROP_COLOR,Green);
      ObjectMove("Lable_"+i, 0,(Time[0]+Period()*720), (WindowPriceMin()+shcala/2)-shcala/12*i);
               } 
      } 
 void CreateUp(string info) 
               {
                  ObjectCreate("TextAlerts", OBJ_LABEL, 0, 0, 0);  
                  ObjectSetText("TextAlerts",info , 16, "Times New Roman", Green);
                  ObjectSet("TextAlerts", OBJPROP_CORNER, 0);
                  ObjectSet("TextAlerts", OBJPROP_XDISTANCE, 20);
                  ObjectSet("TextAlerts", OBJPROP_YDISTANCE, 10);       
               }

MetaQuotes Ltdによってロシア語から翻訳されました。
元の記事: https://www.mql5.com/ru/articles/1556

添付されたファイル |
0_CTL.mq4 (5.47 KB)
Sleep か否か? Sleep か否か?
EA のアクションの間にポーズを実装する Sleep() 関数の代替使用を提案します検討する方法によりマシンタイム賢い使い方ができます。
自動制御システム(ACS)のコンテキストでのテクニカル分析の考え方、また『逆説』 自動制御システム(ACS)のコンテキストでのテクニカル分析の考え方、また『逆説』
本稿は、テクニカル分析の代替の考え方を実証します。それは最新の自動制御理論やテクニカル分析自体の原理に基づくものです。本稿は、実用的なアプリケーションをいくつか使って理論を表現する導入記事です。
MetaTrader 4 クライアントターミナルのプログラムフォルダ MetaTrader 4 クライアントターミナルのプログラムフォルダ
本稿では、MetaTrader 4 クライアントターミナルのプログラムフォルダの内容を説明します。本稿は、クライアントターミナル操作の詳細をすでに理解し始めた方に有用です。
コメントによってコード内エラーを判断する方法 コメントによってコード内エラーを判断する方法
本稿では、コメントを基に MQL4 コード内のエラーを検索する方法について説明します。この方法は、ほどほどに大きなコード内のエラーによって生じるコンパイル中に問題が発生する場合に便利であることが判ります。