コーディングのヘルプ - ページ 100

 
dasssi:
mladen

まず、あなたがこれ以上私に腹を立てないように願っています。

Eaをロードしようとするとエラーが発生します。

dasssi

EAの名前を変えてみてください(名前にフランス語が含まれているため、問題を引き起こしている可能性があります。)

 

ありがとうございます。

ストラテジーテスター 上ではうまくいきません

 
dasssi:
ありがとうございます、これで動きます/ストラテジーテスターではよく見えません

これは、シグナルが発生したときにEAからどのようにインジケータを呼び出すべきかの一例です。完全なEAとは程遠いものです(エリートとアドバンスセクションの新しいEAを見て、コードを比較してみてください - どういう意味かわかると思います)。というわけで、After-rageのコーディングの問題を解決するための手助けをしただけです。

 

ありがとうございます。ポジションを入力するときにうまくいきます。なぜ私のEAが動作しないのか分かりませんが、それは問題ではありません。それで、クローズオーダーのコードを追加 しようとしたのですが、これもうまくいきません。不思議なのは、私はポジションを入力するための構造コードを取り、私はちょうどロットのボリュームを2倍にしています。見てもらえますか?

ファイル:
 
After-rage:
ありがとうございます。これは、ポジションを入力するためにうまく動作します。なぜ私のEAが動作しなかったのか分かりませんが、それは問題ではありません。それで、注文を閉じるためのコードを追加しようとしたのですが、それもうまくいきません。不思議なのは、私はポジションを入力するための構造コードを取り、私はちょうどロットのボリュームを2倍にしています。見てもらえますか?

アフターレイジ

あなたがそれを行うことができる1つの方法(信号が変更されたときに開いている注文を閉じる)は、今のコードにある

ファイル:
 

ありがとうございました。とてもうまくいきました。なぜ私が間違っていたのか、この問題に取り組んでみます。

 

例えば、私は、ATRが変わるとCCIの期間も 変わるように、期間がATRと同じであるCCIを持ちたいと思っています。問題は、コードでインディを再インストールする方法が分からないことです。新しいバーが開かれたときにinit()を呼び出そうとしましたが、期間は正しく変わりましたが、インディケータは更新されません。最後のバーの値は正しいですが、インディ全体を新しい設定に再描画したいのです。

 
AtApi:
例えば、私はATRが変わるとCCIの期間も変わるように、期間がATRと同じであるCCIを持ちたいのですが、新しいバーごとにインディケータを開始するようなものです。問題は、コードでインディを再インストールする方法が分からないことです。新しいバーが開かれたときにinit()を呼び出そうとしましたが、期間は正しく変わりましたが、インディケータは更新されません。最後のバーの値は正しいですが、インディ全体を新しい設定に再描画したいのです。

インディ値全体を再描画したい場合は、開始時のメインループのカウントをBars-1に設定し、新しい設定で値を計算するだけです。

 

mladenさん、早速のご回答ありがとうございます。

この例をご覧ください。

extern int IndicatorPeriod = 10;

extern int AtrPeriod= 10;

extern bool DynamicPeriod = TRUE;

int init()

{

if (DynamicPeriod)

{

double atr = NormalizeDouble(100*iATR(0,0,AtrPeriod,0),0);

IndicatorPeriod = atr;

}

}

int start()

{

datetime lastBarOpenTime;

datetime thisBarOpenTime = Time[0];

if (DynamicPeriod)

{

if(thisBarOpenTime != lastBarOpenTime)

{

lastBarOpenTime = thisBarOpenTime;

init();

}

}

int i,counted_bars=IndicatorCounted();

if(counted_bars<0) return(-1);

if(counted_bars>0) counted_bars--;

// is this what you are talking about?

int limit=MathMin(Bars-counted_bars,Bars-1);

for(i=limit; i>=0; i--) //MAIN LOOP

{

wherever calculation

}

}

 
AtApi:
mladenさんの迅速な回答ありがとうございました...

この例をご覧ください。

extern int IndicatorPeriod = 10;

extern int AtrPeriod= 10;

extern bool DynamicPeriod = TRUE;

int init()

{

if (DynamicPeriod)

{

double atr = NormalizeDouble(100*iATR(0,0,AtrPeriod,0),0);

IndicatorPeriod = atr;

}

}

int start()

{

datetime lastBarOpenTime;

datetime thisBarOpenTime = Time[0];

if (DynamicPeriod)

{

if(thisBarOpenTime != lastBarOpenTime)

{

lastBarOpenTime = thisBarOpenTime;

init();

}

}

int i,counted_bars=IndicatorCounted();

if(counted_bars<0) return(-1);

if(counted_bars>0) counted_bars--;

// is this what you are talking about?

int limit=MathMin(Bars-counted_bars,Bars-1);

for(i=limit; i>=0; i--) //MAIN LOOP

{

wherever calculation

}

}

AtApi

もし、バッファに値を保存したいのであれば(そのバーの正確な時間ごとに1つの値)、はい、それは正しい方法です。しかし、もし全てのバーを「再描画」したいのであれば、linitを常にBars-1と等しくなるように設定してください。