// в этом цикле поочередно перебираем все открытые позиции for(i=0;i<PositionsTotal();i++) { // выбираем позиции только по "нашему" инструменту if(Symbol()==PositionGetSymbol(i)) ... }
bool BuyOne = true, SellOne = true; // только один ордер. глобальные переменные
if(Buy_Signal && // покупаем если есть сигнал на покупку PositionSelect(Symbol())==false && // ордер закрыт BuyOne) // при условии на покупку ставим только один ордер { mrequest.type = ORDER_TYPE_BUY; // ордер на покупку mrequest.price = NormalizeDouble(latest_price.ask,_Digits); // последняя цена ask mrequest.sl = NormalizeDouble(latest_price.ask - STP*_Point,_Digits); // Stop Loss mrequest.tp = NormalizeDouble(latest_price.ask + TKP*_Point,_Digits); // Take Profit OrderSend(mrequest,mresult); // отсылаем ордер BuyOne = false; // на покупку только один ордер SellOne = true; // меняем флаг одного ордера на продажу }
Expert Advisorのテスト中。
Exp_TEMA.mq5、記事より。"異なるシンボルで取引するExpert Advisorの作成"。Told[] Tnew[1]式は以下の値を取得します。
Told[] 式が評価されませんでした。
Tnew[1] 無効な配列範囲です。
そして、My_First_EA.mq5、記事より。"初心者のためのMQL5 Expert Advisorの書き方ステップバイステップガイド "という表現があります。
New_Time[1]はInvalid array rangeという値を取得します。
Expression could not be evaluated, Invalid array range, and how does they affect EA results?
Told - サイズを指定しない空の配列
Tnew[1] - out ofarrayは Tnew[1]と記述されているため、インデックスが0から始まるため、その要素にはTnew[0]としてしかアクセスできない。
Told - サイズを指定しない空の配列
Tnew[1] - out of arrayはTnew[1]と記述されているため、インデックスが0から始まるため、その要素にはTnew[0]としてしかアクセスできない。
1つの条件に対して1つの取引しか行わない方法を教えてください。私のコードでは、この条件で端末が複数のディールを開いてしまいますが、私は1つだけでいいのです。
その結果、次のような絵が出来上がりました。
この条件で取引されたかどうかを確認するにはどうすればよいですか?この方法で試しましたが、うまくいきません。
1つの条件に対して1つの取引しか行わない方法を教えてください。私のコードでは、この条件で端末が複数のディールを開いてしまいますが、私は1つだけでいいのです。
その結果、次のような絵が出来上がりました。
この条件で取引されたかどうかを確認するにはどうすればよいですか?この方法で試しましたが、うまくいきません。
また、PositionSelectという 素晴らしいものがあるのに、なぜループ内に検索を配置するのでしょうか?
ただ、面白い記号の上に位置があることを確認して、それが本当なら、コニャックを飲んで葉巻を吸いに行く...。:)
追記
私の理解では、 PositionSelectなしのPositionGetStringは 動作しないはず です。すべてのオープンポーズの記号を知る必要はないですよね?![](https://c.mql5.com/3/1/winkf11.gif)
PositionSelectの ような素晴らしいものがあれば、ループ内を検索する必要はないのでは?
興味のあるツールのポジションの有無を確認し、その通りになったら静かにコニャックを飲み、葉巻を吸う...。:)
追記
私の理解では、 PositionSelectなしのPositionGetStringは 動作しないはず です。すべてのオープンポーズの記号を知る必要はないですよね?
このコードは、オープンポジションの存在を考慮したものです。
しかし、Buy_Signalの条件が満たされたときにポジションを開き続けます。私が欲しいのは、Sell_Signalが発生する前に、Buy_Signalのポジションが再びオープンしないようにすることです。私はこのように実装しようとしているのです。
行かないんです。このようなコードは、オープンポジションの存在を考慮に入れています。
しかし、Buy_Signalの条件が満たされると、ポジションを持ち続けることができます。Sell_Signalが発生する前に、Buy_Signalによってそれ以上のポジションがオープンされないことを確認する必要があります。私はこのように実装しようとしています。
それはない。なぜこのコードなのか?私が言いたかったこととはほとんど見えません(そこがすべて正しいかどうかは疑問ですが)。
というような意味です。
せめてブロックでもいいのでは
なぜこのような特殊なコードなのか?私が言いたかったことと全然似ていない(全く合っていないと思う)。
というような意味です。
最低でも全てはブロック単位で行えます。
このコードと上記のコードは、ポジションを 閉じるまでオープン しませんが、条件が満たされた場合、次のバーでクローズした後、新たにオープンします。私はこのように実装しています。
ありがとうございました。皆様のご希望をすべて取り入れ、すべて動作するようになりました。Expert Advisorを公開しました。コードにもう少し手を加えることができます。誘惑に限界はない)))