KimIVの便利な機能 - ページ 46

 
SK. писал (а)>>

そういうことなんです。既存の制約を考慮しなければなりませんが、一般的に言って、制約は常に変化しています。

可能な限りの制約を解析する関数はありますか?

改造も同様です。

--

(私は、各 good order (OP,SL,TP) に対して3つ、各 market order (SL,TP) に対して2つの合計16の関数を持っています。

そして、許可証の組み合わせを分析するいくつかの関数があります)。

そうですね、私は、可能な限りの制限をチェックするオーダー設定用の関数と、修正用の関数(最初の関数に一部似ています)も別に持っています。しかし、一般的には、実際の取引のExpert Advisorでは、それなしでは困難です。:-)

 
Shu писал (а)>>

そう、私は注文を設定するための別の関数を持っていて、それは可能な限りの制限をチェックし、修正のための別の関数(最初の関数と一部似ている)も持っています。 私はあなたにコードを与えることはありません - 私だけが必要とする、非常に多くの "左" トリックがあります - 痛いです。しかし、一般的には、実際の取引のExpert Advisorでは、それなしでは困難です。:-)

実は、すべてを考慮に入れているかどうか、自分で確認したかったのです。チェックしないと、バウンスの連続に遭遇する可能性があります(時にはアクセス禁止になる可能性もあります)。

私のチェックを簡単に列挙します。

1)StopLevel。例えば、SL BuyStopを修正する場合。

距離だけを確認するのではありません。StopLevelの現在の位置とストップオーダーの動きの方向性を分析する必要があります。

SLがStopLevelの回廊の外にある場合、近くに移動するか、無期限に移動させることができます。

SLがコリドー内にある場合、上方への移動は拒否されます。距離コリドー内の変更距離を3pとし、コリドーを30pとした場合、実際に実行を許可する値はStopLevelコリドー境界で定義されるため、ダウン動作は受け入れられるが、StopLevelを考慮する。

2)FreezeLevel。

3. StopLevelとTICKSIZEの比率。注文がすべての通路の外側にある可能性がありますが、TICKSIZEの倍数ではない - それは問題です。修正方向に向かって丸みを帯びる必要があります。非通貨」に対してクリティカル。

4.ロットです。 ミンロート +/- ミンロートパーシャルクロージャーとカウンタークロージャーもみんロクに限定されていることを考慮してください(私見では非論理的ですが、そういうことです)。

パーソナルチェックの後、各チェックがポジティブに終了した場合(禁止事項なし)、オーダーが発行されます。

 

機能ライブラリの完全公開。

b-Graphics.rar - グラフィカルなオブジェクトを 扱うことができます。

b-Indicators.rar - インジケータを使用した作業

 

ArrayLR()関数です。

この関数は、線形回帰の値の配列を生成します。この関数は、以下の必須パラメータを受け付ける。

  • x は数値系列の値の配列である。入力パラメータです。この配列は、関数が呼ばれる前の値を含んでいなければなりません。
  • y は線形回帰の値の配列である。これは出力パラメータです.つまり,関数が実行された後に,この配列が埋められます.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 20.05.2008                                                     |
//|  Описание : Формирует массив значений линейной регрессии.                  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    x - массив значений числового ряда                                      |
//|    y - массив значений линейной регрессии                                  |
//+----------------------------------------------------------------------------+
void ArrayLR(double& x[], double& y[]) {
  double a, b, c, sx=0, sx2=0, sxy=0, sy=0;
  int    i, n=ArraySize(x);

  if (n>1) {
    for (i=0; i<n; i++) {
      sx+=i+1;
      sy+=x[i];
      sxy+=(i+1)*x[i];
      sx2+=(i+1)*(i+1);
    }
    a=sx*sy-n*sxy;
    c=sx*sx-n*sx2;
    if (c!=0) a=a/c; else a=0;
    b=(sy-a*sx)/n;
    ArrayResize(y, n);
    for (i=0; i<n; i++) y[i]=a*(i+1)+b;
  } else Print("ArrayLR(): Недостаточное количество элементов ряда! n=", n);
}
 

ArrayLR()関数の使用例です。

過去30バーの線形回帰の 価格水準をマークしてみましょう。

#define r 30
double x[r], y[];
for (int i=0; i<r; i++) x[i]=Close[i+1];
ArrayLR(x, y);
for (i=0; i<r; i++) SetArrow(170, Red, "arr"+i, Time[i+1], y[i]);

P.S. ArrayLR()関数をテストするスクリプトを添付します。

ファイル:
 
KimIV писал (а)>>

機能ライブラリの完全公開。

b-Graphics.rar - グラフィカルなオブジェクトを 扱うことができます。

b-Indicators.rar - インジケータを使用した作業

とてもクールです。>> ありがとうございました

 
Parabellum писал (а)>>

Igorさん、複数のローソク足を1つにまとめることができる良いインジケーターが ありますよ。しかし、それは1時間足チャートでしか機能しません。ユニバーサルにすることは可能ですか?

ありがとうございます。

?

 
Parabellum писал (а)>>

?

ほいほいしかたない

このような指標はすでに書かれているのですが、誰が書いたのか、どこで見たのか覚えていません......。自分で探すか、誰かがリンクを教えてくれると思ったのですが...。

 

ArrayLR()関数が正確に動作しない。

1.バーの時間的位置を考慮していない。バーがない場合、正しく動作しません。

2. 係数の計算に使われるアルゴリズムには、丸め誤差の蓄積という欠点があります。「Help me write a linear regression」を参照してください(Rosh ページの一番下にこの落とし穴が確認されています)。

3.このような欠点がないアルゴリズムを提案する。

4. X[i]=Time[i+1]; を X[i]=i+1; に置き換えると、アルゴリズムは似ているが、エラー累積はない。

5.週末だけでなく、バーもサボる :-((

以下は私のバリエーションです。

//+----------------------------------------------------------------------------+
//|  Автор    : Сергей Привалов aka Prival,  Skype: privalov-sv                |
//+----------------------------------------------------------------------------+
//|  Версия   : 10.09.2008                                                     |
//|  Описание : Формирует массив значений линейной регрессии y(x)=A*x+B.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    X    - массив значений числового ряда, ось X                            |
//|    Y    - массив значений числового ряда, ось Y                            |
//+----------------------------------------------------------------------------+

void Array_LR(double &X[], double& Y[])
{
      double mo_X = 0, mo_Y = 0, var_0 = 0, var_1 = 0;
      int    i,N=ArraySize(X);
      double A,B;
     
      if(N>1)  {
         for ( i = 0; i < N; i ++ ) {
            mo_X +=X[i];
          mo_Y +=Y[i];
      }
      mo_X /=N;
      mo_Y /=N;
        
      for ( i = 0; i < N; i ++ )   {
         var_0 +=(X[i]-mo_X)*(Y[i]-mo_Y);
         var_1 +=(X[i]-mo_X)*(X[i]-mo_X);
      }
      // значение коэффициента A
      if(var_1!=0)   A = var_0 / var_1; else A=0;
      // значение коэффициента B
      B = mo_Y - A * mo_X;
      ArrayResize(Y, N);
     for (i=0; i<N; i++) Y[i]=A*X[i]+B;
    } else Print("ArrayLR(): Недостаточное количество элементов ряда! n=", N);
    
}

これは写真です。

作品例

#define r 280
void start() {
  double X[r], Y[r];
  for (int i=0; i<r; i++)  {
    Y[i]=Close[i+1];
    X[i]=Time[i+1];
  }
   Array_LR(X, Y);
  for (i=0; i<r; i++) {SetArrow(170, Blue, "arr"+i, X[i], Y[i])}

チェック用スクリプトを添付

ファイル:
 
Prival писал (а)>>
以下は私のバリエーションです。

よし、セルゲイ! この関数に2つのバリエーションがあるとしよう。

私のバリアントは、ビルトインのグラフィックオブジェクトOBJ_REGRESSIONと同じであるため、良い。誰かがこのオブジェクトから価格を取る必要がある場合、私の機能は彼らを助けることができますが、残念ながらあなたの機能は...でも、他の用途にも使えそう...。ありがとうございました。