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

 

Hi Mladen, as always, u rock!

mladen:
Terrance その場合はClose[0]を使ってください。ほとんどのEAがCloseを使用しているので、あなたにも使えると思います。
 

...

EAがバーの開始時にのみ実行される場合、2つの理由が考えられます。

- 新しいバーのみで動作するように制限されています。この方法はトレーリングストップやそれに類するものを管理する場合、いくつかの問題がありますが、固定ストップロスやテイクプロフィットで 機能するならば、それはすべて同じです。

- または、閉じたバーでシグナルをチェックしている(これは、シグナルをチェックする最も一般的な(そして最良の)方法です)。結果として、新しいバーが形成されたときにそれを行っているように見えますが、実際には、形成されたばかりの閉じたバー上の信号を取得しているのです。閉じたバーのシグナルで動作することはEAにおけるベストプラクティスであり、あなたのEAがそのように動作している場合、何も変更しない方がよいでしょう。

Premeus:
M1タイムフレームで価格が動いている間、私のEAが実行されないことに気づきました。EAはティックが入るたびに実行されることは知っています。

しかし、私はそれがそれが新しいバーを開始するたびに実行されているのを見ました。

私は誤解しているのでしょうか?

ティックが入るたびに強制的にEAを起動させる方法はありますか?

私は利益と損失をピップではなく、利益と損失 を使ってコントロールしようと思っています。スパイクが発生したとき、EAは新しいバーが発生するまで利益または損失の設定に到達したときに注文を閉じません。

どなたかこの問題を解決する方法を教えてください。

私はEAのコーディングは初めてです。

よろしくお願いします。
 

mladenさん、ありがとうございます。

ご指摘の件、試してみます。

 

コーディングの神々よ、ようこそ。

同じ値段の注文がすでに存在する場合、注文を出すことができないように制御するEA関数を見つける手助けが必要です。

注文の開始価格と注文タイプが 既存の注文の開始価格と注文タイプである場合、終了して次の入力条件を探すという簡単なロジックです。

また、注文が既存の価格からx pips離れている場合、注文が実行されないようにする関数が必要です。

単純なロジック:注文の開始価格とタイプが<最後の注文の開始価格とタイプ+ x pipsである場合、終了して次のエントリー基準を探す。

ありがとうございます。

ピップ

 

...

1つ目は、
全く同じ建値の
注文が
既に
あるかどうか、

2つ目は、希望する建値からnnnポイント以内にある注文が

あるかどうかを確認する機能です。

価格が同じか、現在開いているいくつかの注文の価格からの距離が指定された距離以内であれば、両方ともtrueを返します。

bool existsAtSamePrice(int magicNumber, double price)

{

for (int i=OrdersTotal()-1; i>=0 ; i--)

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;

if (OrderSymbol()!=Symbol()) continue;

if (OrderMagicNumber()!=magicNumber) continue;

if (CompareDouble(OrderOpenPrice(),price)) return(true);

}

return(false);

}

//

//

//

//

//

bool existsAtApproximatePrice(int magicNumber, double price, double distance)

{

for (int i=OrdersTotal()-1; i>=0 ; i--)

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;

if (OrderSymbol()!=Symbol()) continue;

if (OrderMagicNumber()!=magicNumber) continue;

if (MathAbs(OrderOpenPrice()-price)< distance) return(true);

}

return(false);

}

//

//

//

//

//

bool CompareDouble(double val1, double val2)

{

return(NormalizeDouble(val1,Digits)==NormalizeDouble(val2,Digits));

}

Pip:
コーディングの神様にご挨拶。

同じ値段の注文がすでに存在する場合、注文を出すことができないように制御するEA関数を見つける手助けが必要です。

単純なロジック:注文のオープン価格と注文タイプ=既存の注文のオープン価格と注文タイプであれば、終了し、次のエントリ基準を探してください。

また、注文が既存の価格からx pips離れている場合、注文が実行されないようにする関数が必要です。

単純なロジック:注文の開始価格とタイプが<最後の注文の開始価格とタイプ+ x pipsである場合、終了して次のエントリー基準を探す。

ありがとうございます。

ピップ
 
mladen:
それはいくつかの理由が考えられますが、最も一般的なものは:
- 損切りと利益確定が現在の価格に近
すぎる

- あなたのブローカーがECN/STPタイプである場合、まず損切りと利益確定を0に設定して注文を出す必要があり、注文が開かれたときに初めて損切りと利益確定を希望の値に修正できます(もちろん、前のポイントに従いますが)

こんにちは!

助けてくれてありがとうございます。

つまり、もし私が正しく理解していれば、OrderSendにExsternal "rule "としてTakeProfitとStopLossを挿入した場合、このEAは非ECNブローカーでのみ正しく機能するのでしょうか?

私の英語について申し訳ありません

 

...

はい

ECN/STPのようなブローカーでは、ストップロスおよび/またはテイクプロフィットを0に設定して注文を開く必要があり、注文がすでに開かれたときにのみ、ストップロス および/またはテイクプロフィットを変更 することができます。

pearl1:
こんにちは。

助けてくれてありがとうございます。

つまり、もし私が正しく理解していれば、OrderSendにTakeProfitとStopLossをExsternal "ルール "として挿入すれば、このEAは非ECNブローカーでのみ正しく機能するのでしょうか?

私の英語について申し訳ありません
 
mladen:
はい、ECN/STPのようなブローカーでは、ストップロスおよび/またはテイクプロフィットを0に設定して注文を開く必要があり、注文がすでに開かれたときにのみ、ストップロスおよび/またはテイクプロフィットを修正することができます。

ありがとうございます。

 

...

私が言ったように、あなたは2つのステップでそれを行う必要があります。

1. ステップ - 損切りと利食いを 0に設定した注文を(OrderSend()を使って)オープンする。

2. ステップ - その注文を修正する (OrderModify() を使用する) ストップロスとテイクプロフィットを希望の値に設定する。

そこで、1つのステップではなく、2つのステップで仕事をするようにコードを変更する必要があります。

pearl1:
ありがとうございます、それで...どのように私はこれを修正できますか?すみません
 

コーディングの初心者

皆さん、こんにちは。

私はコーディングの初心者で、言語と構文を徐々に学んでいますが、MT4がどのように変数を更新するかについて質問が出てきました。

私は、現在開いている取引の最高利益を表示し、新しい高値に達した場合にのみ更新する簡単なEAをコーディングしようとしましたが、何が起こっているかというと、利益が出るにつれて金額が下がったり上がったりしているのですが、コードのロジックで私のエラーを見つけることができないようです。

選択したトレードがまだオープンであることを確認するためにチェック します。

t_CloseTime=OrderCloseTime(); //注文が閉じられていなければ0を返す。

if(t_CloseTime==0) //ゼロでなければ注文はクローズされます。

{

if(OrderProfit() > LastProfitHigh) LastProfitHigh=OrderProfit();

if(LastProfitHigh >= MinProfit && MinProfitReached==false) MinProfitReached=true;

}//endif

ということで、ロジックが正しければ、なぜこの変数「LastProfitHigh」が上がったり下がったりするのでしょうか......。

ご教授ありがとうございます。