コーディングの方法は? - ページ 119

 

これが間違っているのかどうか、考えています。

for (int i=qqea_alert_x_candles_ago; i>0; i--) {

// int i = 1;

qqea_up = iCustom(NULL,0, "QQE Alert v3",0,i);

qqea_down = iCustom(NULL,0, "QQE Alert v3",1,i);

if (qqea_up < qqea_down) {。

if (i == 1) qqeacross = True;

qqea_long = True。

qqea_short = False。

} else if (qqea_up > qqea_down) {。

if (i == 1) qqeacross = True;

qqea_long = False。

qqea_short = True。

}

}

}

qqea_alert_x_candles_ago "バーまで有効な信号をチェック する必要がありますが、それは(i = 1)があり、i = 1は一度だけ起こるのですか?

 
matrixebiz:
これが間違っているかどうか考えています。

for (int i=qqea_alert_x_candles_ago; i>0; i--) {

// int i = 1;

qqea_up = iCustom(NULL,0, "QQE Alert v3",0,i);

qqea_down = iCustom(NULL,0, "QQE Alert v3",1,i); qqea_down = iCustom(NULL,0, "QQE Alert v3",1,i);

Print("qqea_up: ", qqea_up, "qqea_down: ", qqea_down);

if (qqea_up < qqea_down) {。

if (i == 1) qqeacross = True;

qqea_long = True。

qqea_short = False。

} else if (qqea_up > qqea_down) {。

if (i == 1) qqeacross = True;

qqea_long = False。

qqea_short = True。

}

}

}

それは戻って "qqea_alert_x_candles_ago "バーまで有効な信号のためにチェックする必要がありますが、それは(i = 1)持っているi = 1のみ一度に発生するのですか?

qqea_alert_x_candles_ago" > 0と仮定すると、あなたのコードの額面通りは大丈夫のように見えます。

これが動作しない場合、あなたの問題はiCustomとの関係である可能性が高いです。

この関数が 正しく動作するためには、実際のインジケータの入力要素ごとに、入力要素を渡す必要があります。もし、これを行わなかったり、間違ったデータ型を渡したりすると、icustomは何も返しません。

上記のコードにPrintステートメントを追加しました。これを使用して、iCustomから返された値が実際に何かを含んでいるかどうかを判断してください。

では、また。

Hiachiever

 

バーをカウントするコードで助けを必要とする

私のEAには、オープンポジションのストップロスを計算するためのオプションがいくつかあります。 そのうちの1つは、過去「x」本数の価格バーの安値を使用することです。

現在、ロングポジションでこのオプションのストップロス(SL)を計算するためにEA内で使用されているコードの行は次のとおりです。

SL=iLow(Symbol(),Period(),iLowest(Symbol(),Period(),MODE_LOW,StopLossBars,0));

StopLossBarsは外部入力変数です。

問題は、ポジションを開いてからバーがカウントされるたびに、ストップロスの他の条件がこの条件を上回るまで、StopLossBarsの値が増加するようにしたいことです。 次のようなコード行を推測します。

StopLossBars = StopLossBars + BarsCountedSincePositionOpened

のようなコードでうまくいくと思います。 残念ながら、私のコーディングはカットアンドペーストに限られており、BarsCountedSincePositionOpenedの計算やコーディングの仕方が分かりません。

どなたか教えていただけませんか?

 
hiachiever:
qqea_alert_x_candles_ago">0と仮定すると、あなたのコードは額面通りです。

この関数が動作しない場合、あなたの問題はiCustomに関連している可能性が高いです。

この関数が正しく動作するためには、実際のインジケータの各入力要素に対して入力要素を渡す必要があります。もし、これを行わなかったり、間違ったデータ型を渡したりすると、icustomは何も返しません。

上記のコードにPrintステートメントを追加しました。これを使用して、iCustomから返された値が実際に何かを含んでいるかどうかを判断してください。

お疲れ様でした。

ハイエナ

このコードは他のEAのものですが、ループが "qqea_alert_x_candles_ago" > 1 になったとき、このステートメント "if (i == 1) qqeacross = True;" は今はFalseになるのですよね?i>qqea_alert_x_candles_agoまでTrueのままであるべきなのに。

 

お役立ち情報

皆さんへ

このコーディングは同僚から教えてもらったものです。このコードは、SMAの上下のエントリーを知らせる非常に良いインジケータになるはずだと言われました。どなたか、このコーディングでインジケータを作るのを手伝っていただけませんか?

/*[[

名前 := SMA Up and Down

セパレートウインドウ := no

最初の色 := 青

最初の描画タイプ:= 線

第二データ使用 := はい

第二の色 := 赤

第2描画タイプ := 線

]]*/

入力 : MAPeriod(10), Bandwide_UP(20),Bandwide_DOWN(20);

変数 : shift(0), cnt(0), sum(0), loopbegin1(0), loopbegin2(0), first(True), prevbars(0);

変数 :MA(0);

SetLoopCount(0);

// 初期チェック

MAPeriod < 1 ならば Exit;

// 追加のバーをロードするか、トータルリロードをチェックする

If Bars 1 Then first = True;

prevbars = Bars;

// loopbegin1とloopbegin2がカウントされたバーのカウンターを防ぐ 現在のバーを除く

If first Then Begin

loopbegin1 = Bars-MAPeriod-1;

If loopbegin1 < 0 Then Exit; // カウントするためのバーが足りない

loopbegin2 = Bars-MAPeriod-1;

If loopbegin2 < 0 Then Exit; // カウントするのに十分なバーがありません。

first = False; // このブロックは一度だけ評価されます。

終了

// 収束-発散

loopbegin1 = loopbegin1+1; // 現在のバーも再計数されます。

For shift = loopbegin1 Downto 0 Begin

MA = iMA(MAPeriod,MODE_SMA,shift);

SetIndexValue(shift,(MA+Bandwide_UP*point)); SetIndexValue2(shift,(MA+Bandwide_UP*point));

SetIndexValue2(shift,(MA-Bandwide_DOWN*point)); SetIndexValue2(shift,(MA-Bandwide_DOWN*point));

loopbegin1 = loopbegin1-1; // 前のバーへの再カウントを防止する。

終了です。

よろしくお願いします。

ロジェリオ

 

コードのヘルプが必要です

私は次のコードのヘルプが必要です現時点では、ACがゼロ以上または以下の場合にのみ注文を開き、私はそれが赤が緑に変更され、ビザを開くようにしたいです。

ダブルAC1 = iAC(NULL, 0, Current + 0);

double AC2 = iAC(NULL, 0, 現在値 + 1);

if ((AC1 < AC2))オーダー = SIGNAL_CLOSEBUY;

 
matrixebiz:
このコードは他のEAのものですが、ループが「qqea_alert_x_candles_ago」>1になったとき、この「if (i == 1) qqeacross = True;」というステートメントは、今はFalseになると思っていたのですが、違いますか?i>qqea_alert_x_candles_agoまでTrueのままであるべきなのに。

いいえ、それは正しくありません。

つまり、forループの最後のループで、「if (i == 1) qqeacross = True;」というチェックが 行われるのです。最終的には、qqeacrossが発生した場合、出力はtrueになります。

唯一の問題は、以前のループでqqeacrossがtrueに設定されていた場合である。これを解決するには、forループの前にqqeacross = false;を設定する必要がある。こうすることで、もしqqeacross = trueが、直前に終了したループによって設定されたことを確認することができます。

乾杯。

hiachiever

 
Pussy Galore:
私のEAには、オープンポジションのストップロスを計算するためのいくつかのオプションがあります。そのうちの1つは、過去「x」本数の価格バーの安値を使用するものです。

このオプションのロングポジションのストップロス(SL)を計算するためにEA内で現在使われているコードラインは以下の通りです。

SL=iLow(Symbol(),Period(),iLowest(Symbol(),Period(),MODE_LOW,StopLossBars,0)) です。

StopLossBarsは外部入力変数です。

問題は、ポジションを開いてからバーがカウントされるたびに、ストップロスの他の条件がこの条件を上回るまで、StopLossBarsの値が増加するようにしたいことです。次のようなコード行を推測します。

StopLossBars = StopLossBars + BarsCountedSincePositionOpened

のようなコードでうまくいくと思います。残念ながら、私のコーディングはカットアンドペーストに限られており、BarsCountedSincePositionOpenedの計算やコーディングの仕方が分かりません。

どなたか方法を教えてください。

これを行う方法は、グローバルスコープ(つまりinitの前)で変数を作成することです。

例えば

int BarCount;

int init ()

そして、ストップロスの コードで以下を使用します。

if (BarCount<Bars)

{

SL=iLow(Symbol(),Period(),iLowest(Symbol(),Period(),MODE_LOW,StopLossBars,0))。

StopLossBars++;

BarCount=Bars;

}

これは、新しいバーごとにStopLossBarsを1ずつ増加させます。

コードへの唯一の追加事項は、新しい取引が開始されたときに「StopLossBars」を元のデフォルト値にリセットすることです。

乾杯

Hiachiever

 
denis68:
私は次のコードで助けを必要とする現時点ではACがゼロ以上または以下の場合にのみ注文を開き、私はそれが赤が緑に変更された場合に開き、その逆をしたい。

double AC1 = iAC(NULL, 0, Current + 0);

double AC2 = iAC(NULL, 0, Current + 1);

if ((AC1 < AC2))オーダー = SIGNAL_CLOSEBUY;

この2行を削除することで、インジケータコードの他の2つのバッファを開いたり、表示したりすることができます。

// SetIndexLabel(1,NULL)。

// SetIndexLabel(2,NULL)。

そして、私の修正したACでiCustomを呼び 出す。

double ac1 = iCustom(NULL, 0, "AcceleratorMod", 1, 1);

double ac2 = iCustom(NULL, 0, "AcceleratorMod", 2, 1);

double ac11 = iCustom(NULL, 0, "AcceleratorMod", 1, 2);

double ac22 = iCustom(NULL, 0, "AcceleratorMod", 2, 2)。

bool acbuy = ac2==0 && ac11==0; // 赤から緑に変わる。

bool acsell = ac1==0 && ac22==0; // 緑から赤に変更されます。

それが役立つことを願っています

 

matrixebiz この2行を削除するとはどういう意味でしょうか。