ポジションをクローズする。オン表示信号です。 - ページ 5 123456789 新しいコメント Rid 2007.11.30 09:35 #41 komposter: のライドを 行います。 やはり結果は同じ!最後のバリエーションでは、最後のオープンポジションのみがクローズされます。 今度はOrderCloseの 後にreturnを削除して、その結果を観察してみましょう;) //---------------------------------------------------------------------- // for (int v=0; v<OrdersTotal(); v++) { for ( int v = OrdersTotal() - 1; v >= 0; v -- ) { if (OrderSelect(v, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==Symbol()&& OrderMagicNumber()==Magic) { //----------------------------------------------------- if (OrderType() == OP_BUY) { if( RVI_1>=Up_lim && RVI_0<Up_lim) { OrderClose(OrderTicket(),OrderLots(),Bid,3,Green); // закрываем позицию // return(0); // выходим } } //-------------------------------------------------------- if (OrderType() == OP_SELL) { if((RVI_1_<=Low_lim) && (RVI_0_>Low_lim)) { OrderClose(OrderTicket(),OrderLots(),Ask,3,Green); // закрываем позицию // return(0); // выходим } } //------------------------------------------------------- } // Symbol() } // select } //total } //Close_ //**************************************************************************** 指示されたとおりにやりました。そして、奇跡が起きた。すべてのオープンポジションは、インジケーターのシグナルによってクローズされます。でも、なぜ? Victor Nikolaev 2007.11.30 09:44 #42 rid: komposter のライドを 行います。 やはり結果は同じ!最後のバリエーションでは、最後のオープンポジションのみがクローズされます。 今度はOrderCloseの 後にreturnを削除して、その結果を観察してみましょう;) //---------------------------------------------------------------------- // for (int v=0; v<OrdersTotal(); v++) { for ( int v = OrdersTotal() - 1; v >= 0; v -- ) { if (OrderSelect(v, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==Symbol()&& OrderMagicNumber()==Magic) { //----------------------------------------------------- if (OrderType() == OP_BUY) { if( RVI_1>=Up_lim && RVI_0<Up_lim) { OrderClose(OrderTicket(),OrderLots(),Bid,3,Green); // закрываем позицию // return(0); // выходим } } //-------------------------------------------------------- if (OrderType() == OP_SELL) { if((RVI_1_<=Low_lim) && (RVI_0_>Low_lim)) { OrderClose(OrderTicket(),OrderLots(),Ask,3,Green); // закрываем позицию // return(0); // выходим } } //------------------------------------------------------- } // Symbol() } // select } //total } //Close_ //**************************************************************************** 指示されたとおりにやりました。そして、奇跡が起きた。すべてのオープンポジションは、インジケーターのシグナルに従ってクローズされました。でも、なぜ? あなたの帰国で処理サイクルが中断された。 Rid 2007.11.30 11:38 #43 了解です。ご回答いただいた皆様、ありがとうございました。 Rid 2007.12.01 12:09 #44 KimIV: 私は普段からこのような機能を実装しています。 //+----------------------------------------------------------------------------+ //| Управление позициями | //+----------------------------------------------------------------------------+ void ManagePositions() { double sl=0, tp=0; int ms[2]; ArrayInitialize(ms, 0); GetTradeSignal(ms); if (ExistPositions("", -1, Magic)) { if (ms[1]>0) ClosePositions("", OP_BUY , Magic); if (ms[1]<0) ClosePositions("", OP_SELL, Magic); } else { if (ms[0]>0) { if (StopLoss>0) sl=Ask-StopLoss*Point; else sl=0; if (TakeProfit>0) tp=Ask+TakeProfit*Point; else tp=0; OpenPosition(OP_BUY, sl, tp, Magic); } if (ms[0]<0) { if (StopLoss>0) sl=Bid+StopLoss*Point; else sl=0; if (TakeProfit>0) tp=Bid-TakeProfit*Point; else tp=0; OpenPosition(OP_SELL, sl, tp, Magic); } } } このように、かなり特殊な動作をする関数が書かれています。そして、これらの機能を組み合わせることで、ポジションに応じた望ましい戦術を実現するのです。 イゴールさん、もう少し詳しく機能を説明してください。 理解したいのですが、私の知識が乏しいため、最初の方で思考が途切れてしまうのです。 Igor Kim 2007.12.01 13:48 #45 rid писал (а): イゴール、あなたの機能をもっと詳しく説明してください。理解したいのですが、私の知識がささやかなため、最初の段階で思考が途切れてしまうことがあります。 これは、動作中のEAから抜き出した例です。機能割り当て。 関数 GetTradeSignal() は、配列 ms[] に取引シグナルを格納します。もちろん、GetTradeSignal()関数の詰め方は専門家ごとに異なります。 関数 ExistPositions()は、位置の存在フラグを返す。 関数 ClosePositions() は、対応する信号が ms[] 配列に存在する場合、1つまたは複数のポジションを閉じます。閉じる前に、if (ExistPositions("", -1, Magic)) という条件でポジションの存在を確認する。 関数OpenPosition()は、ms[]配列に対応するシグナルがある場合、現在の価格で1つのポジションをオープンします。信号がない場合のみ、ポジションを開くことができます。 タクティクス ポジションがあり、クローズするシグナルがあれば、ポジションをクローズ する。 ポジションがなく、ポジションを建てるシグナルがあれば、ポジションを建てる。 こんなに簡単なんですよ?:-) Rid 2007.12.01 21:04 #46 はい、ありがとうございます。何か考えてみるよ。 Rid 2008.01.05 11:55 #47 皆さん、こんにちは!メリークリスマス もうひとつ問題が出てきました。理論に目を通したが、まだ出口は見つかっていない。Expert Advisor で開いたポジションを閉じるのに、ストップロスやテイクプロフィットの代わりに関数を使用する必要があります。してきました。うまくいった!しかし... Expert Advisorにロット(B-lot)を計算するライブラリを挿入しようとしたところ、不明な動作をすることが判明!?MMを使わなければ、(最適化後の)バランスカーブはほとんど目立たずに右肩上がりになっていたのに、MMを入れたら急降下してしまいましたさらに!Bロットライブラリを削除し、ロットサイズを0.1から0.2にするだけでも、再び急激なプルダウンが見られる。初回入金額が数倍になったとしても・・・・・・。つまり、図書館でも預金額でもなく、そもそもドローダウンが悲惨だったという...。.こんな感じでエントリーしています。 //---------------ПОКУПАЕМ ------------------------------------------ ... ... ... if (Long) { //выключатель вкл if (!ExpertOrder( MagicLong )) {//если нет открытых длинных позиций //Lots=GetSizeLot(); ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"AТ",MagicLong,0,Blue); if(ticket<0){Print("Ошибка открытия ордера BUY #",GetLastError());return(0);} } } ここでは、すべてが明確に理解できるのです。そして、OrderClose(. ...)関数を使ってポジションをクローズしています。こんな感じ。for (int v=0; v<OrdersTotal(); v++) { // for ( int v = OrdersTotal() - 1; v >= 0; v -- ){ if (OrderSelect(v, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==Symbol() ) { //----------------------------------------------------- if (ExpertOrder( MagicLong )) { if(OrderProfit() > tp) { OrderClose(OrderTicket(),OrderLots(),Bid,3,Green); return(0);} if(OrderProfit() <= -sl) { OrderClose(OrderTicket(),OrderLots(),Ask,3,Green); return(0);} } }}} ロット=0.1に初期設定すると正常に動作するのですが、ロットサイズを変更(増加)しようとしたり、MMライブラリを有効にしようとすると動作がおかしくなってしまうのですなぜなんでしょう?OrderLots()の代わりに "Lots "を使用しましたが、何も変わりません。お願いします、教えてください。 Andrey Khatimlianskii 2008.01.05 13:18 #48 rid: 初期ロット=0.1では正常に動作しますが、ロットサイズを変更(増加)したり、MMライブラリを有効にすると、動作がおかしくなります。なぜなんでしょう?OrderLots()の代わりに "Lots "を使用しましたが、何も変わりません。お願いします、アドバイスお願いします。 EAがどのように違う動きを するのか、見ていかなければなりません。 注文の開始/終了は以前と同じタイミングですか? Rid 2008.01.05 14:24 #49 ロットを0.1から0.2に上げると、取引はより頻繁に、2倍以上の頻度で発生するようになりました。同じ外部パラメータで ...不思議ですね。 でも、あまりの手抜きのなさに!こんな感じでやりました。 OrderClose 関数によるポジションのクローズを削除し、ticket=OrderSend(... ...)関数でStop LossとTake Profitによる通常のクローズを用意しました。この場合、MMブロックはそのとおりに動作しました!どうやら、この機能が重要なようです。 if(OrderProfit() > tp) { OrderClose(OrderTicket(),OrderLots(),Ask,3,Green); } ロットを増やす場合は、「tp」の値を適宜変更する必要があるのでは? Andrey Khatimlianskii 2008.01.05 15:51 #50 空に向かって指を差そうか?;) エラーはコードにあります。コードもないので、どこにあるのかわかりません。隣の支店の透視能力者を呼び出す;) 123456789 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
やはり結果は同じ!最後のバリエーションでは、最後のオープンポジションのみがクローズされます。
指示されたとおりにやりました。そして、奇跡が起きた。すべてのオープンポジションは、インジケーターのシグナルによってクローズされます。でも、なぜ?
やはり結果は同じ!最後のバリエーションでは、最後のオープンポジションのみがクローズされます。
指示されたとおりにやりました。そして、奇跡が起きた。すべてのオープンポジションは、インジケーターのシグナルに従ってクローズされました。でも、なぜ?
私は普段からこのような機能を実装しています。
このように、かなり特殊な動作をする関数が書かれています。そして、これらの機能を組み合わせることで、ポジションに応じた望ましい戦術を実現するのです。イゴール、あなたの機能をもっと詳しく説明してください。理解したいのですが、私の知識がささやかなため、最初の段階で思考が途切れてしまうことがあります。
これは、動作中のEAから抜き出した例です。機能割り当て。
タクティクス
こんなに簡単なんですよ?:-)
皆さん、こんにちは!メリークリスマス
もうひとつ問題が出てきました。理論に目を通したが、まだ出口は見つかっていない。Expert Advisor で開いたポジションを閉じるのに、ストップロスやテイクプロフィットの代わりに関数を使用する必要があります。してきました。うまくいった!しかし...
Expert Advisorにロット(B-lot)を計算するライブラリを挿入しようとしたところ、不明な動作をすることが判明!?MMを使わなければ、(最適化後の)バランスカーブはほとんど目立たずに右肩上がりになっていたのに、MMを入れたら急降下してしまいましたさらに!Bロットライブラリを削除し、ロットサイズを0.1から0.2にするだけでも、再び急激なプルダウンが見られる。初回入金額が数倍になったとしても・・・・・・。つまり、図書館でも預金額でもなく、そもそもドローダウンが悲惨だったという...。.こんな感じでエントリーしています。
ここでは、すべてが明確に理解できるのです。そして、OrderClose(. ...)関数を使ってポジションをクローズしています。こんな感じ。ロット=0.1に初期設定すると正常に動作するのですが、ロットサイズを変更(増加)しようとしたり、MMライブラリを有効にしようとすると動作がおかしくなってしまうのですなぜなんでしょう?OrderLots()の代わりに "Lots "を使用しましたが、何も変わりません。お願いします、教えてください。
初期ロット=0.1では正常に動作しますが、ロットサイズを変更(増加)したり、MMライブラリを有効にすると、動作がおかしくなります。なぜなんでしょう?OrderLots()の代わりに "Lots "を使用しましたが、何も変わりません。お願いします、アドバイスお願いします。
注文の開始/終了は以前と同じタイミングですか?
ロットを0.1から0.2に上げると、取引はより頻繁に、2倍以上の頻度で発生するようになりました。同じ外部パラメータで ...不思議ですね。 でも、あまりの手抜きのなさに!こんな感じでやりました。
OrderClose 関数によるポジションのクローズを削除し、ticket=OrderSend(... ...)関数でStop LossとTake Profitによる通常のクローズを用意しました。この場合、MMブロックはそのとおりに動作しました!どうやら、この機能が重要なようです。
ロットを増やす場合は、「tp」の値を適宜変更する必要があるのでは?エラーはコードにあります。コードもないので、どこにあるのかわかりません。隣の支店の透視能力者を呼び出す;)