2つの先物間のスプレッド

 

皆さん、こんにちは。

2つの先物間のスプレッドを描画するインジケータを書きました。2つの問題があります。

1) インジケータが乱暴に不具合を起こし、表示されるときとされないときがあり、そのときは無意味なものを表示する(更新を押せば、収まるような気がする)。

2) 先物同士を同期させるアルゴリズム:先物は流動性が低いため,棒グラフが不足することがあり,棒グラフを同期させて本当のスプレッドを得るには問題があった.フォーラムで検索しましたが、このテーマに関するものは見つかりませんでした。最終的に、次の方法を思いつきました。4つの時系列を取ります:機器#1のバータイム、機器#1のバークローズ価格、機器#2のバータイム、機器#2のバークローズ 価格です。タイムシリーズに同じ数のバーを指定すると、ある商品では同一、別の商品では同一になります(時間と終値の縛り)。あとは、一方の機器の時刻を他方の機器と相対的に同期させるだけです。以下は、#1 のデータに基づくスプレッド構築の例です。#1 の i 番目の終値を取り、#1 の配列と時間値が一致する#2 の配列のインデックスと等しい#2 の商品の価格をそこから引き算 します。

   if(Flag==SincForIn1)									// Синхронизируем по первому инструменту.
      {
       while(i>=0)                                                			// Цикл перебора для расчета спреда для всех непосчитанных баров, от самого последнего i до нулевого.
         {
          SpreadBuffer[i]=closeIn1[i]-closeIn2[ArrayBsearch(timeIn2,timeIn1[i])]; 	// Расчет спреда (существуют различия в количесве баров двух инструментов, за основу берутся бары Инструмента №1)
          i--;                                                    			// Снижение индекса бара для перехода расчетов к следующему бару и так до нулевого включительно.
         }

これ以上のものはないと思っています。もしかしたら、2つの先物の同期したスプレッドチャートを構築する、もっとシンプルで明確で効果的な方法があるかもしれないので、皆さんのご意見を伺いたいと思います。そうすれば不具合はなくなるかもしれないし、「かっこいい」インジケーターを書くかもしれないし...。

インジケーターをポストに貼り付けました。

ありがとうございました。

ファイル:
Spread.mq5  24 kb
 
iiivasyaiii:

皆さん、こんにちは。

2つの先物間のスプレッドを描画するインジケータを書きました。2つの問題があります。

1) インジケータが乱暴に不具合を起こし、表示されるときとされないときがあり、そのときは無意味なものを表示する(更新を押せば、収まるような気がする)。

2) 先物同士を同期させるアルゴリズム:先物は流動性が低いため,棒グラフが不足することがあり,棒グラフを同期させて本当のスプレッドを得るには問題があった.フォーラムで検索しましたが、このテーマに関するものは見つかりませんでした。最終的に、次の方法を思いつきました。4つの時系列を取ります:機器#1のバータイム、機器#1のバークローズ価格、機器#2のバータイム、機器#2のバークローズ 価格です。タイムシリーズに同じ数のバーを指定すると、ある商品では同じ、別の商品では同じ(結合時間と終値)になります。あとは、一方の機器の時刻を他方の機器と相対的に同期させるだけです。以下は、#1 のデータに基づくスプレッド構築の例です。#1 の i 番目の終値を取り、#1 の配列と時間値が一致する#2 の配列のインデックスと等しい#2 の商品の価格をそこから引き算 します。

これ以上のものはないと思っています。もしかしたら、2つの先物の同期したスプレッドチャートを構築する、もっとシンプルで明確で効果的な方法があるかもしれないので、皆さんのご意見を伺いたいと思います。そうすれば不具合はなくなるかもしれないし、「かっこいい」インジケーターを書くかもしれないし...。

インジケーターをポストに貼り付けました。

ありがとうございました。

スプレッドをプロットするためには、ビッド価格とアスク価格を取る必要があります。チャートはフリッパーで描かれているので、それは正しくないでしょう。
 
Maxim Romanov:
スプレッドを構築するために、買値と売値を取る必要があるのですが。チャートはフリッパーで描画されるため、これでは正しく表示されません。

マキシムさん、私の問題に目をとめていただきありがとうございます。

ご回答に対して、いくつかコメントをさせていただきます。

1)発生した(最後の)取引の価格が描画されない、これはFXではありません。それ以外の意味なら、もっと詳しく説明してください。

2)BidとAskは確かに良いが、桁違いに複雑である。買いスプレッドと売りスプレッドのように、メインのスプレッドに対して2行追加で書き込もうとしました。一度試したのですが(ちなみにずっとそのように描かれていました)、その後コードの何かを変えたら消えてしまい、二度と現れませんでした))、もし必要なら彼のコードを送りますよ。そして、入札とaxの主な欠点:私が覚えていれば、データ入札とaxは、最後の2000ティックのために保存されているので、その上に長い履歴を分析することはできません。

それでは、まず終値で 2つの商品のスプレッドを構築するところから始めて ください。ArrayBsearch()を使って2つの商品の価格を同期させるという私のやり方は正しいのでしょうか、それとももっと簡単な方法があるのでしょうか?

 
iiivasyaiii:

マキシムさん、私の問題に目をとめていただきありがとうございます。

ご回答に対して、いくつかコメントをさせていただきます。

1)発生した (最後の)取引の価格が描画されない、これはFXでは ありません。

そのような知識で、このような指標を書くのは早計です。

 
iiivasyaiii:

皆さん、こんにちは。

2つの先物間のスプレッドを描画するインジケータを書きました。2つの問題があります。

1) インジケータが乱暴に不具合を起こし、表示されるときとされないときがあり、そのときは無意味なものを表示する(更新を押せば、収まるような気がする)。

2) 先物同士を同期させるアルゴリズム:先物は流動性が低いため,棒グラフが不足することがあり,棒グラフを同期させて本当のスプレッドを得るには問題があった.フォーラムで検索しましたが、このテーマに関するものは見つかりませんでした。最終的に、次のような方法を思いつきました。4つの時系列を取ります:機器#1の棒時間、機器#1の棒終値、機器#2の棒時間、機器#2の棒終値 です。タイムシリーズに同じ数のバーを指定すると、ある商品では同じ、別の商品では同じ(結合時間と終値)になります。あとは、一方の機器の時刻を他方の機器と相対的に同期させるだけです。以下は、#1 のデータに基づくスプレッド構築の例です。#1 の i 番目の終値を取り、#1 の配列と時間値が一致する#2 の配列のインデックスと等しい#2 の商品の価格をそこから引き算 します。

これ以上のものはないと思っています。2つの先物の同期したスプレッドチャートを構築するために、もっとシンプルで明確で効果的な方法があるかもしれないので、皆さんの提案を聞きたいと思います。そうすれば不具合はなくなるかもしれないし、「かっこいい」インジケーターを書くかもしれないし...。

インジケーターをポストに貼り付けました。

添付しておきました。 よろしくお願いします。

ごきげんよう。

1.株式取引」の欄に書き込む必要があります。

2.2つの先物をバーで同期させることはできません。

先物の一つ(最も流動性の高いSBRF9.20が良い)のバーを基準にする必要があります。

3.スプレッドの全体像を把握するためには、クローズではなくティックを取り、メインの先物として選択した1つのバーと同期させる必要があります。

4.再計算を素早く行うには、最後に計算した位置を記憶しておくとよいでしょう。

バータイム同期によるスプレッド再計算コード例

int pr_pos = 0;
            int sec_pos = 0;
            bool is_found;
            int pr_mem = 0;
            int sec_mem = 0;
            for(int i = 0; i < a_bars; i++)
            {
              is_found = false;
              while(pr_pos < pr_cnt) 
              {
                if((ulong(data_time[i].time) <= ulong(pr_ticks[pr_pos].time)) &&
                   (ulong(data_time[i].time) + 60 > ulong(pr_ticks[pr_pos].time)))
                {
                  pr_mem = pr_pos;
                  while(sec_pos < sec_cnt) 
                  {
                    if((ulong(data_time[i].time) <= ulong(sec_ticks[sec_pos].time)) &&
                       (ulong(data_time[i].time) + 60 > ulong(sec_ticks[sec_pos].time)))
                    {
                      is_found = true;
                      sec_mem = sec_pos;
                      if((sec_ticks[sec_pos].bid > 0.0) && (pr_ticks[pr_pos].ask > 0.0) &&
                         (sec_ticks[sec_pos].ask > 0.0) && (pr_ticks[pr_pos].bid > 0.0))
                      {
                        data_time[i].hi_value = sec_ticks[sec_pos].bid - pr_ticks[pr_pos].ask;
                        data_time[i].low_value = sec_ticks[sec_pos].ask - pr_ticks[pr_pos].bid;
                      }
                      break;
                    }
                    sec_pos++;
                  }
                  break;
                }
                pr_pos++;
              }
              if(is_found == false)
              {
                pr_pos = pr_mem;
                sec_pos = sec_mem;
              }
            }
 
Alexey Viktorov:

そんな知識で、そんな指標を書くのは早計です。

あなたはとても賢いので、終値で 2つの価格シリーズを同期させる方法を教えてくれるかもしれません;)

 
prostotrader:

こんにちは。

1.取引所取引」の欄に書き込む必要があります。

2.2つの先物をバーで同期させることはできません。

先物の一つ(最も流動性の高いSBRF9.20が良い)のバーを基準にする必要があります。

3.スプレッドの全体像を把握するためには、クローズではなくティックを取り、メインの先物として選択した1つのバーと同期させる必要があります。

4.再計算を素早く行うには、最後に計算した位置を記憶しておくとよいでしょう。

バータイム同期を用いたスプレッド再計算のコード例

Prostotraderさん、情報提供ありがとうございました。面白い解決策ですね、今試してみて後で報告します。

 
iiivasyaiii:

あなたはとても賢いので、終値で 2つの価格シリーズを同期させる方法を教えてくれるかもしれません;)

質問の本質はもうお分かりですね。取引価格(終値はともかく!)でスプレッドを構築することはできません。なぜなら、遅い足には長い間取引がない可能性があり、あったとしても速い足の取引価格と同期していない可能性があるからです。つまり、そのような情報の価値はゼロである。市場には常に(あるいはほとんど常に)現在の買値と売値が存在し、分析すべきはその買値と売値である。

 
iiivasyaiii:

マキシムさん、私の問題に目をとめていただきありがとうございます。

ご回答に対して、いくつかコメントをさせていただきます。

1)発生した(最後の)取引の価格が描画されない、これはFXではありません。それ以外の意味なら、もっと詳しく説明してください。

2)BidとAskは確かに良いが、桁違いに複雑である。買いスプレッドと売りスプレッドのように、メインのスプレッドに2行追加して書いてみた。一度試したのですが(ちなみにずっとそのように描かれていました)、その後コードの何かを変えたら消えてしまい、二度と現れませんでした))、もし必要なら彼のコードを送りますよ。そして、入札と依頼の主な欠点:私が覚えていれば、データの入札と依頼は、最後の2000ティックのために保存されているので、その上に長い履歴を分析することはできません。

それでは、まず終値で 2つの商品のスプレッドを構築するところから始めて ください。ArrayBsearch()を使って2つの商品の価格を同期させるという私のやり方は正しいのでしょうか、それとももっと簡単な方法があるのでしょうか?

私はプログラマーではないので、コードは必要ない、コードは手伝えない。でも、要するにヒントをあげます。つまり、取引所の商品は端末の価格によって構築されており、prostotraderさんが書かれているように、終値で同期させるのは正しくないということですね。ティックで、はい、正解になります。すぐに正しい道を探しなさい、なぜ間違いを犯すのですか)
 
prostotrader:

こんにちは。

1.取引所取引」の欄に書き込む必要があります。

2.2つの先物をバーで同期させることはできません。

先物の一つ(最も流動性の高いSBRF9.20が良い)のバーを基準にする必要があります。

3.スプレッドの全体像を把握するためには、クローズではなくティックを取り、メインの先物として選択した1つのバーと同期させる必要があります。

4.再計算を素早く行うには、最後に計算した位置を記憶しておくとよいでしょう。

バータイム同期を用いたスプレッド再計算のコード例

Prostotrader、良い一日!私はかなりあなたのコードを理解していなかった、私に助言してください。

1) CopyTicksRange または CopyTicks 機能を使用しましたか?

2)これらの関数の説明には、2000ティック以上コピーできないとありますが、このインジケータはそれ以上の履歴を分析できないということでしょうか?

 
Dmi3:

質問の本質はもうお分かりですね。スプレッドは取引価格(終値はともかく!)に基づくことはできない。なぜなら、遅い足では長い間取引がない可能性があり、あったとしても速い足の取引価格と同期していないことになるからである。つまり、そのような情報の価値はゼロである。市場には常に(あるいはほとんど常に)実際の売値と買値が存在し、我々が分析しなければならないのは、この売値と買値である。

ビッドの方が正確であることに異論はありません(ただし、フリッパー、アスク・ビード、ビッド・アスクの3つのスプレッドを表示する短時間インジケータを用意したところ、ほとんどの場合、フリッパーは最後の2つの間に入り、一般に流動性の高い商品ではフリッパーのスプレッドは十分であることを示しています)。

その上で、できるだけリソースを消費しない方法で、できれば深い履歴を持つ asc/bid の同期を行う方法を考えましょう。

例えば、Prostatraderには面白いオプションがあります(上の写真)。

理由: