10Pips毎の基準線の引き方

 

これは私がいつも使っている便利なスクリプトです。これは10ピップごとに基準線を引いて、相場の動きを把握するのに役立つ。画面右側の価格を見てこれを理解するのは本当に悔しいので、スクリプトを作りました。このスクリプトは、初心者がオブジェクトを描く練習をするのにいいかもしれない。

int start()
{  
    int nLines = 40;                                   // Number of total line to draw
    double lineInterval = 0.0010;                      // Interval between lines
    ObjectsDeleteAll(0,OBJ_HLINE);                     // Clear all the lines from the window - CAREFUL!
    double normPrice = NormalizeDouble(Close[1],3);    // Current price is rounded to nearest "10"
    for (int ix = 0; ix < nLines; ix++)                // Loop span number of times
        {
            ObjectCreate("tensLines"+ix, OBJ_HLINE, 0, 0, normPrice+((ix-(nLines/2))*lineInterval));    // Place half above and half below the current price
            ObjectSet("tensLines"+ix,OBJPROP_COLOR,DarkSlateGray);      // Make the lines look better
        }
    return(0); //All done
}
 
MisterDog:

これは私がいつも使っている便利なスクリプトです。これは10ピップごとに基準線を引いて、相場の動きを把握するのに役立つ。画面右側の価格を見てこれを理解するのは本当に悔しいので、スクリプトを作りました。このスクリプトは、初心者がオブジェクトを描く練習をするのにいいかもしれません。

スクリプトではなくCIにする、終値からではなく0から計算する、チャートの見える部分(WinPriceMax()とその姉妹)にのみ描画する、価格が限界を超えて動いたら更新する(あなたの場合、ライン間隔=10pips)、OBJ_HLINEの代わりにOBJ_RECTANGLEを 使用する、などです。

これで、開いているすべてのチャートで同期されます。

:D

 

または ... これをインジケータにする ... 新しいバーの開始時にのみリフレッシュされるように、もう少しコードが必要 ...

int deinit()
   {
   for (int ix = 0; ix < nLines; ix++) // delete my horizontal lines
      {
      ObjectDelete("tensLines"+ix);
      }
   return(0);
   }


int start()
   {  
   int nLines = 40;                                   // Number of total line to draw
   double lineInterval = 0.0010;                      // Interval between lines
   double normPrice = NormalizeDouble(Close[1],3);    // Current price is rounded to nearest "10"

   for (int ix = 0; ix < nLines; ix++)                // Loop span number of times
      {
      if(ObjectFind("tensLines"+ix) < 0) 
         ObjectCreate("tensLines"+ix, OBJ_HLINE, 0, 0, normPrice+((ix-(nLines/2))*lineInterval));    // Place half above and half below the current price

      else ObjectSet("tensLines"+ix, OBJPROP_PRICE1, normPrice+((ix-(nLines/2))*lineInterval));
      ObjectSet("tensLines"+ix,OBJPROP_COLOR,DarkSlateGray);      // Make the lines look better
      }
   return(0); //All done
   }
 
onewithzachy:

スクリプトではなくCIにする、終値からではなく0から計算する、チャートの見える部分だけに描画する(WinPriceMax()とその姉妹)、価格が限界を超えて動いたら更新する(あなたの場合、ライン間隔=10pips)、OBJ_HLINEの代わりにOBJ_RECTANGLEを使用する、など。

これで、開いているすべてのチャートで同期されます。

:D


これは、「O BJ_HLINEの 代わりにOBJ_RECTANGLE」という部分を除けば、すべて意味があることです。なぜ矩形なのか?
 
RaptorUK:

または ... これをインジケータにする ... 新しいバーの開始時にのみリフレッシュされるように、もう少しコードが必要 ... ...


はい、もちろん -- ずっと良い。教えてください、ObjectDeleteのようなものにある種の "ワイルドカード "を使う方法はありますか?ObjectDelete("tensLines "*);つまり、"tensLines "で始まるものをすべて削除する、というようなことをしたいんです。
 
MisterDog:

OBJ_HLINEの代わりに OBJ_RECTANGLE」という部分を除いては、これですべて納得がいく。なぜ長方形 なのでしょうか?

WindowsBarsPerChart()とWindowsFirstVisibleBar()を使ってみてください。

チャートの右下を見て、25/341とある。これは、グリッドが25ピップでチャートの高さが341ピップであることを意味します。

:D

 
onewithzachy:

WindowsBarsPerChart()とWindowsFirstVisibleBar()を使ってみてください。

チャートの右下を見て、25/341とある。これは、グリッドが25ピップでチャートの高さが341ピップであることを意味します。

:D

実は、このバーのレイアウトが好きなんです。目に優しいですからね。右肩上がりの価格なんて見たことない」とおっしゃいますね。買うか売るかの二択なのに、なぜ五分五分の確率で8割方間違うのか、よく不思議に思っていました;-)
 
MisterDog:
私は、このバーを使ったレイアウトが好きです。目に優しいですしね。右側の価格なんて見たことない」とおっしゃいますね。私はよく不思議に思うのですが、買うか売るかの二択だけで、五分五分の確率なのに、八割方間違って いるんです;-)

こちらも同じ.

:D

 
MisterDog:
実は、このバーのレイアウトが好きなんです。目に優しいですからね。右肩上がりの価格なんて見たことない」とおっしゃいますね。買うか売るかの二択なのに、なぜ五分五分の確率で8割方間違うのか、よく不思議に思っていました;-)

私がEAをテストしてきたことが真実であると仮定すれば、答えはとても簡単です。 リスクとリターンの関係です。もしあなたが20のリスクと80のリワード(または同様の比率)を持っているなら、私はあなたが20%の勝率を持つことができる方法を見ることができます。しかし、それはあなたが小さな取引をしている場合、スプレッドを考慮する必要がありますので、非常に単純ではありません。
 
onewithzachyさん、OBJ_RECTANGLEスタイルのチャートの セットアップに取りかかったところです。WindowsBarsPerChart()とWindowsFirstVisibleBar() について言及 されましたが、どのようにしたら左側からバーを走らせることができるのでしょうか?画面の左側から右側へバーを走らせる方法を見つけ出すのにまだ苦労しています。でも、このレイアウトは気に入っていますこれを行う方法について何か手がかりがありますか?
 
MisterDog:
onewithzachyさん、OBJ_RECTANGLEスタイルのチャートの 設定に取り掛かったところです。WindowsBarsPerChart()とWindowsFirstVisibleBar() について言及 されましたが、私はまだ困っています。画面の左側から右側へバーを走らせる方法を見つけ出すのにまだ苦労しています。でも、このレイアウトは気に入っていますこれを行う方法について何か手がかりがありますか?

MisterDogさん、こんにちは。

簡単なことです。

1.あるバーと別のバーの間の時間距離を取得します。これは、現在のバーの時間と前のバーの時間を引くか、周期に60秒を掛けることで得られますが、月曜日には時間差があるので、後者を選びます。

datetime Bar_Time_Gap; // or integer type

Bar_Time_Gap = Time [0] - Time [1]; // or Time [7] - Time [8] or whatever
Bar_Time_Gap = Period()*60;

2.2. WindowsFirstVisibleBar()は一番左のバーです。そのバーから描画を始めるか、あるいはそのバーのn本左、例えば5本左から描画を始めるのがよいでしょう。 WindowsFirstVisibleBar() の戻り 値が20 だとします。つまり、一番左のバーはバー[20]であり、バー[25]から描画を開始することになります。実際には[Bars - 1]から描画しています。

datetime Start;

Start = Time [WindowFirstVisibleBar() + 5];                  //which is the same ...
Start = Time [WindowFirstVisibleBar()] - 5 * Bar_Time_Gap;   //... with this one

3.3. WindowsBarsPerChart() は、チャート上のバーの本 数を表します。WindowsBarsPerChart() の戻り 値が35で、 WindowsFirstVisibleBar()が20 だとします。つまり バー[0]から始まって 右側には約15本の空白が あることになります。 この矩形の端を、その空いたバーの右端に 描くか、あるいは、そのバーの右端から5本分右に描き始めるよいでしょう

datetime End;
int Right_Bar = WindowBarsPerChart() - WindowFirstVisibleBar() + 5;

End = Time[0] + Right_Bar * Bar_Time_Gap;

新しいバーが来ると、この右のバーは左へ移動するので、長方形の端が見えるようになり、それをまた描かなければなりません。

私はここで間違いを作っていないことを望む、cozは私がこれを速く書いた。

:D

理由: