bool exit_for=false;double max_1=0;double max_2=0;for(int k=0; k<Bars; k++){if(iRSI(Symbol(),0, rsi_period,PRICE_CLOSE, k)<iRSI(Symbol(),0, rsi_period,PRICE_CLOSE, k+1)&&iRSI(Symbol(),0, rsi_period,PRICE_CLOSE, k+1)>iRSI(Symbol(),0, rsi_period,PRICE_CLOSE, k+2)){//Если это первый максимум:if( max_1==0)
max_1=iRSI(Symbol(),0, rsi_period,PRICE_CLOSE, k+1);//Записываем номер бара экстремумаelse//Если первый найден, записываем второй{
max_2=iRSI(Symbol(),0, rsi_period,PRICE_CLOSE, k+1);
exit_for=true;}}//Выход из цикла, когда найдены оба максимумаif( exit_for==true) k=Bars+1;}
// ищем самый последний закрытый ордерfor( i=OrdersHistoryTotal(); i>=0; i--){if(OrderSelect( i, SELECT_BY_POS, MODE_HISTORY)){if(OrderSymbol()==Symbol()){if(OrderMagicNumber()== MagicNumber){if(OrderCloseTime()!=0){if(OrderCloseTime()> time){
time =OrderCloseTime();
tikcet=OrderTicket();
profit=OrderProfit();
type =OrderType(); <-----
}}}}}}
int ORDtype;
// ищем самый последний закрытый ордерfor( i=OrdersHistoryTotal(); i>=0; i--){if(OrderSelect( i, SELECT_BY_POS, MODE_HISTORY)){if(OrderSymbol()==Symbol()){if(OrderMagicNumber()== MagicNumber){if(OrderCloseTime()!=0){if(OrderCloseTime()> time){
time =OrderCloseTime();
tikcet=OrderTicket();
profit=OrderProfit();
ORDtype =OrderType(); <-----
}}}}}}
// торг условия
if(ORDtype=1)&&....
条件には、Iforder type was OP_BUY then blah blah blah と正しく書きました。
こうはいきません。結果として、私は履歴で最大値を探す(それは前日の最大値を見つける)ことを得るが、私はそれがこの関数が動作した後の成就を待つ必要がある(1stバーの値> 70のように) ....この条件が満たされた場合(バー>70の前ではなく、後)、1番目のマキが2番目のマキより低い場合、注文はクローズされます。
何を変えたらいいのか、ヒントがあれば教えてください。
ありがとうございました。
もう一つ質問です。)
注文が履歴から選択された後、その種類(注文がBuyまたはSellで閉じられたか)を判断するには?
ある変数を宣言しておいて、別の変数を使おうとしている。
そうか、すぐにそう言ってくれればよかったのに......そうでないと老後は楽しくない--でも、若さは厄介だ......。
>>スパシーバ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!?
アドバイスお願いします
注文がストップで閉じたか利益で閉じたかを明確に理解する必要があります
私は変数 priceprofitbuy と pricestopbuy を作りました
orderend 前に私は pricebuy = Ask とし、注文は pricebuy に出され、成功すれば、警告し pricebuy に基づいて、 priceprofitbuy と pricestopbuy を記憶します
さらに条件 priceprofitbuy >= Bid= Bid and pricestopbuy <= Bid, I check if the order is closed on profit or stop
. しかし、Bidがtakeprofitレベルに到達して注文が閉じられることもあるが、ループが priceprofitbuy >= Bidに到達する間にBidが低くなり、ループが正しく機能しなくなる。
質問 - 注文が利益で決済されたことを明確に検出する方法はありますか?
注文のチケット 番号に変数を割り当て、履歴で利益を確認しようとしましたが、チケットから注文を選択することができません - 履歴には利益だけが表示されます。
priceprofitbuyとpricestopbuyの変数を作ってみました。
受注前にpricebuy = Askを置き、pricebuyで受注送信し、成功したらpriceprofitbuyとpricestopbuyをpricebuyに基づいて警告し保存する。
そして、priceprofitbuy >= Bidとpricestopbuy <= Bidの条件を使って、注文が利益またはストップで閉じられたかどうかをチェックします。
しかし、Bidがtakeprofitのレベルに達し、注文はクローズされるが、サイクルがpriceprofitbuy >= Bidに達したとき、Bidが低くなり、サイクルが正しく機能しないことが発生する。
質問 - 注文が利益で決済されたことを明確に検出する方法はありますか?
注文チケット番号に変数を代入し、履歴で利益を確認しようとしましたが、チケットから注文を選択することができず、履歴では利益値のみ機能します。
ちょっと正しくないですね。
ポジションは、正確な価格ではなく、スリッページ(通常、より悪い価格)で開くことができます。
これは、OrderSelect(...) を使用して事前に選択した後、OrderOpenPrice() 関数を使用して新規注文価格を決定する方がより正しい方法です。
または、その終値の後、始値と終値の差を計算する。後者はOrderClosePrice()関数で決定されます。
OrderType() は、あなたのタイプ(買い/売り)を返します。
xrustさんへ:ありがとうございました。
ただ、取引条件に「クローズドオーダーの種類がOP_BUYだった場合、blah blah()」と記述する方法がよくわからない。
こんな感じで持っています。
条件には、Iforder type was OP_BUY then blah blah blah と正しく書きました。
if(ORDtype=1)&&...。
注文タイプがOP_BUYならブラブラと条件に正しく書いたのですが?
そうでなければならない。
if(ORDtype==1)&&...。
そうでなければならない。
if(ORDtype==1)&&...。
履歴がない場合はfa - 私の場合はORDtype==0?
履歴がない場合 - 私の場合 ORDtype ==0?
明示的に値が代入されていないため、変数の宣言時に指定された値、つまりこの場合は0となります。ところで、前の投稿でOP_BUY注文を選択したいとのことでしたが、この定数は0、1はOP_SELLです。そこで、変数ORDtypeに値-1を宣言するのがよいでしょう。
int ORDtype=-1;
どのような値がどのような操作に対応するのか混乱しないように、コンディションで指定することも可能です。
if (ORDtype==OP_BUY) ...
これは、変数が宣言されたときに指定された値、つまり、この場合、明示的に値を代入していないので、0と等しくなります。ところで、前の投稿でOP_BUY注文を選択したいとのことでしたが、この定数は正確に0であり、1はOP_SELLです。そこで、変数ORDtypeに値-1を宣言するのがよいでしょう。
int ORDtype=-1;
また、どの値がどのような操作に対応するのか混乱しないように、コンディションでそのように指定することもできる。
if (ORDtype==OP_BUY) ...
また、履歴に売り注文があり、Expert Advisorがそれをクローズした場合(履歴タイプでは、それ(そのクローズ)はt/pまたはs/lと表示されます)、それは最後のものとみなされないのでしょうか? 期待した効果を得ることができませんでした((