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

 
mladen:
macerina

最初の部分のみ(残りはそのバリエーション):

ema(7) < ema(21) かつ previous ema(7) < previous ema(21) ならば if ema(of rsi(14),9) < rsi(14) 買いのシグナル

このように言うこともできます。

macd(7,12) < と以前のmacd(7,12) < 0 ならば、ema(of rsi(14),9) < rsi(14) signal for buy)

返信ありがとうございます。

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

 
macerina:
返信ありがとうございますmladenは、それがこの基準でmt4の指標をコーディングすることが可能です事前に感謝します

マセリナ

シンプルなmacd+ rsiのシステムですね。すでにそのようなものがあると思います。もしそのようなものがなければ、それはインジケータを作るのは簡単で、それは作られるでしょう

 
mladen:
https://www.mql5.com/en/forum/174385/page162(3つの利食い注文と3つのトレーリングストップを管理する部分ではなく、あなたが説明したことを正確に行おうとしている部分)を投稿してください。

//買いのオープンオーダーをカウントします。

iOpenOrders_Buy = CntOrd(iOrderType_Buy,MagicNumber,Symbol())です。

//未決済の売り注文を数えます。

iOpenOrders_Sell = CntOrd(iOrderType_Sell,MagicNumber,Symbol());

if (iOpenOrders_Buy==3 || iOpenOrders_Sell==3)

{

if(TrailingStop>0 && TrailingStart > 0) TrailOrder (TrailingStart, TrailingStop).TrailingStop (TrailingStart, TrailingStop).TrailingStop (TrailingStop, TrailingStop);

if (iOpenOrders_Buy==1 || iOpenOrders_Sell==1)

{

if(TrailingStop_2>0 && TrailingStart_2 > 0) TrailOrder_3 (TrailingStart_2, TrailingStop_2);

}

これは、EAが添付されたペアのオープンオーダーの数を探している部分です。

もし3つの注文が見つかったら、通常のトレイリングストップ機能を実行します。そして、もし1つしか取引がなければ、2つ目のトレーリングストップが実行される。

これは1つのペアでは「OK」ですが、このEAを複数のチャート(ペア)に取り付けると、「OrdersTotal()」関数経由ですべてのオープンオーダーを取得するため、うまくいきません。

3つの注文があったのに、1つしか残っていないことをどうやって知るのでしょうか(そのEAには、それを見つけようとするコードは1行もありません)。

//終了 - 未決済の売りポジションを閉じる------------------------。

double OpenPrice=Ask;

int count=3;

if (count==3)

{

BuyOrder_1=OrderSend(Symbol(), iOrderType_Buy, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice_1, "Buy Order",MagicNumber, 0,Blue).を送信します。

if (BuyOrder_1>0) //注文が開かれたかどうか確認する。

{

sLog_CheckBuyConditions = sLog_CheckBuyConditions + sNL + " 買い注文1が正常に送信されました。Ticket=" + BuyOrder_1;

count = count - 1;

このように count は減少し、count=1 まで注文を開始します。つまり、最初はcount=3なので、3つの注文が開かれています。

 
Oridroo:
//count open buy orders.

iOpenOrders_Buy = CntOrd(iOrderType_Buy,MagicNumber,Symbol())です。

//count 未決済の売り注文。

iOpenOrders_Sell = CntOrd(iOrderType_Sell,MagicNumber,Symbol());

if (iOpenOrders_Buy==3 || iOpenOrders_Sell==3)

{

if(TrailingStop>0 && TrailingStart > 0) TrailOrder (TrailingStart, TrailingStop);

if (iOpenOrders_Buy==1 || iOpenOrders_Sell==1)

{

if(TrailingStop_2>0 && TrailingStart_2 > 0) TrailOrder_3 (TrailingStart_2, TrailingStop_2);

}

これは、EAが添付されたペアのオープンオーダーの数を探している部分です。

もし3つの注文が見つかったら、通常のトレイリングストップ機能に従って動作します。そして、もし1つしか取引がなければ、2つ目のトレーリングストップが実行される。

これは1つのペアでは「OK」ですが、このEAを複数のチャート(ペア)に取り付けると、「OrdersTotal()」関数経由ですべてのオープンオーダーを取得するため、うまくいきません。

//終了 - 未決済の売りポジションを閉じる------------------------。

double OpenPrice=Ask;

int count=3;

if (count==3)

{

BuyOrder_1=OrderSend(Symbol(), iOrderType_Buy, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice_1, "Buy Order",MagicNumber, 0,Blue).を送信します。

if (BuyOrder_1>0) //注文が開かれたかどうか確認する。

{

sLog_CheckBuyConditions = sLog_CheckBuyConditions + sNL + " 買い注文1が正常に送信されました。Ticket=" + BuyOrder_1;

count = count - 1;

したがって、countは減少し、count=1になるまで注文が開始されます。つまり、最初はcount=3なので、3つの注文が開始されていることになります。

質問は次のようなものでした : 3つのオープンオーダーが一度あったのに、1つしか残っていないことがどうしてわかるのでしょうか?オープンした注文が1つしか残っていないことは、何も表示されません。また、ブローカーはコメント欄を変更することができるので、いくつかの注文が同じトリプレットの一部であったことを知る方法はありません(注文リストに、いくつかの注文が同じ注文グループに属していることをマークするために使用できるフィールドがない)。

トリプレットに属するチケット番号を保存するファイルを使うという手もありますが、同じEAを別の端末から使おうとすると、とんでもないエラーが出ます。メタトレーダーを再インストールしても同じことが起こる可能性があります。グローバル変数の使用はさらに悪く(ファイルの使用とほぼ同じですが、さらに悪い)、トリプレットの注文を正しく追跡する意味がありません。

では、1つの未決済注文が、3つの注文のうちの最後の未決済注文であるか、新しい三つ組の注文の最初の未決済注文であるかを知るにはどうすればよいのでしょうか。

 
mladen:
質問ですが、3つの注文があったのに、1つしか残っていないのはどうしてですか?オープンした注文が1つしか残っていないという事実は、何も表示されません。また、ブローカーはコメント欄を変更することができるので、いくつかの注文が同じトリプレットの一部であることを知る方法はありません(注文リストに、いくつかの注文が同じグループに属していることをマークするために使用できるフィールドがありません)。 では、1つのオープンした注文が、3つの注文の最後のオープンした注文であるか、新しいトリプレットの最初のオープン注文であるかを知るにはどうしたらいいでしょうか?

ムラデン

PMをチェック、コーダー募集

PMに大きなアイコンをつけるのが夢です

 
mladen:
では、1つの注文が3つの注文のうちの最後の注文であるか、新しい3連の注文の最初の注文であるかは、どのように判断するのでしょうか?

条件があります。

if (MA_Difference_1>=Value_Diff && iOpenOrders_Buy ==0) という条件があります。

この条件によって、もし既存の買い注文があれば、その条件が満たされたにもかかわらず、新しい買い注文を出さないことを保証しているのです。既存の売買注文がないときだけ、新しい注文を出すことになります。

そして、一度に3つの同じ種類の注文(買い/売り)を開き、そのうちの2つがすでに決済されていれば、残りの1つは確実に同じ種類のものである。

私はそれをテストしました。だから、それについて混乱はない。

 
Oridroo:
条件があります。

if (MA_Difference_1>=Value_Diff && iOpenOrders_Buy ==0)

つまり、既存の買い注文があれば、その条件が満たされても、新しい買い注文を出さないようにするのです。既存の売買注文がないときだけ、新しい注文を出すことになります。

そして、一度に3つの同じ種類の注文(買い/売り)を開き、そのうちの2つがすでに決済されていれば、残りの1つは確実に同じ種類のものです。

私はそれをテストしています。だから、それについて混乱はない。

全体として、多くの前提があります。まず、3つの注文を出そうとしたとき、実際に3つの注文を出すということです。1つしか開かなかったら?などなど.

すみません。でも、いつも違うことを話しているような気がします。私はそれができないので、私は誰かがあなたを助けることができることを願っています。

ハッピートレード

 
mladen:
全体として多くの前提があります。まず、3つの注文を出そうとしたとき、実際に3つの注文を出すということです。もし、1つだけしか開かなかったら?などなど・・・。

すみません。でも、いつも違うことを話しているような気がします。私には無理なので、どなたか助けていただけるといいのですが

ハッピートレード

できないのであれば、それはOKです。

私は別のブローカーでしばらくそれをテストしており、それはこれまで3つの注文を開くために '失敗'されていません。

とにかく、私が 'OrdersTotal()' を呼び出している間、EAが異なるペアを区別することを可能にするポイント/ロジックは、少なくとも教えてもらえると思います?

どんな小さなEAの例でも結構です。

 
macerina:
返信ありがとうございます。

マセリナ

この投稿でインジケータを確認 :https://www.mql5.com/en/forum/173574/page432.これは、aspen graphic codeで説明されているものとほぼ同じです。

 

Mladenさん、コードありがとうございます...これは、前のロジックで説明していただいたように、ダブルマクドコンパリションと 50クロスオーバーがあるのでしょうか?

事前にありがとうございます。