EAは復旧するようにコード化されていなければなりません。電源が落ちたり、OSがクラッシュしたり、ターミナルやチャートが誤って閉じられたりすると、次のティックで、静的/グローバルチケット変数がすべて失われています。あなたは未決済の注文を持っていますが、それを知らないので、EAは決してそれを閉じようとせず、SLなどを追跡します。どのように回復するのでしょうか?OrderSelect ループを使用して回復するか、チケット番号の永続的な保存 (GV/file) が必要です。
WHRoeder:
EAは復旧するようにコード化されていなければなりません。電源が落ちたり、OSがクラッシュしたり、ターミナルやチャートが誤って閉じられたりすると、次のティックでスタティック/グローバルチケット変数がすべて失われることになります。あなたは未決済の注文を持っていますが、それを知らないので、EAはそれを閉じようとせず、SLなどをトレールしません。どのように回復するのでしょうか?OrderSelect ループを使用して回復するか、チケット番号の永続的な保存 (GV/file) が必要です。
EAは復旧するようにコード化されていなければなりません。電源が落ちたり、OSがクラッシュしたり、ターミナルやチャートが誤って閉じられたりすると、次のティックでスタティック/グローバルチケット変数がすべて失われることになります。あなたは未決済の注文を持っていますが、それを知らないので、EAはそれを閉じようとせず、SLなどをトレールしません。どのように回復するのでしょうか?OrderSelect ループを使用して回復するか、チケット番号の永続的な保存 (GV/file) が必要です。
こんにちは、以下のようにコードを変更して追加しました。
//---------------------- Buy/Sell function (limit orders) int BuyCall( double BC) { if(!OrderSelect(BuyTicket, SELECT_BY_TICKET)==true) { if ( BuyTicket == 0) { BuyStopLoss = BC - (StopLoss * CalcPoint1); BuyTakeProfit = BC + (TakeProfit * CalcPoint1); BuyTicket = OrderSend(Symbol(),OP_BUYLIMIT,LotSize,BC,UseSlippage,BuyStopLoss,BuyTakeProfit,"Buy limit Order",MagicNumber,expiration,Green); SellTicket = 0; // counter trade// if( Bid < BuyStopLoss && SellTicket == 0 ) { if(!OrderSelect(SellTicket, SELECT_BY_TICKET) == true) { SellStopLoss = Bid + (StopLoss * CalcPoint1); SellTakeProfit = Bid - (TakeProfit * CalcPoint1); SellTicket = OrderSend(Symbol(),OP_SELL,LotSize,Bid,UseSlippage,SellStopLoss,SellTakeProfit,"Sell Order",MagicNumber,0,Red); BuyTicket = 0; } } } }
まだ、同じ注文をティックごとに何度も受けています。
さらに、"!"記号を削除すると、それはどんな取引も取らない。
最後に、私のメイン関数からbuyticketとsellticketのチェックを削除しなければならないのでしょうか?
ありがとうございます。
if(!OrderSelect(BuyTicket, SELECT_BY_TICKET)==true)
-
動画を再生する投稿を編集して ください。
大量のコードについては、それを添付して ください。
- if( (2+2 == 4) == true) とは書かないですよね?if(2+2 == 4) で十分です。だから、if(bool == true) なんて書かないで、if(bool) かif(! bool)を使えばいいんです。bool isLongEnabledのように意味のある変数名を使えば、コードは自己文書化される。Long_Entryはトリガー価格かチケット番号のように聞こえるし、"if long entry "は不完全な文です。
- BuyTicketが クローズしたかどうかはどこで確認するのですか?チケットで選択すると常に真になります(有効なチケット番号がある場合)、注文は保留、オープン、クローズ、削除のいずれかになります。
- OrderSelect ループを提案した私の提案を完全に無視しています。
こんにちは、WHRederさんご返信ありがとうございます。
はい、SRCコードにそれらを追加しました。しかし、編集しても表示されませんでした。
ご指摘の通り、==trueの項を削除してみました。
誤解しないでください、私はこのorderselectループを理解するのが弱いのです。無視したわけではありません。私はそれを追加しようとしましたが、それはあまりにも複雑で、実行すると16のエラーと2つの警告が表示されます。 このコードでは、MN.Countとは何ですか?
// extern int Magic.Number.Base = ... // int magic.number.max; // Export to OpenOrder/MySelect // string market.pair; // Export to OpenOrder/MySelect // int init(){ // market.pair = Symbol(); // magic.number.max = Magic.Number.Base + MN.COUNT - 1;
購入チケットのクローズチェックについて。現在の価格がbuystoplossを下回っていれば、買いの取引は終了しているので、売り注文を 出したので、チェックはしていません。
Bid < BuyStopLoss
ご指摘の通りです。
しかし、2つのエラーが表示されます。"Myselect" と "MyOrdersTotal" はグローバルスコープでのみクリアされます。
int BuyCall( double BC) { //-----------code bool MySelect(int iWhat, int eSelect, int ePool=MODE_TRADES){ if(!OrderSelect(iWhat, eSelect, ePool) ) return (false); int mn = OrderMagicNumber(); if(mn < MNB1 ) return (false); if(mn > MNB2 ) return (false); if(OrderSymbol() != Pair ) return (false); if(ePool != MODE_HISTORY ) return (true); return(OrderType() <= OP_SELL); } int MyOrdersTotal(int op=-1, int ePool=MODE_TRADES){ #define OP_ALL -1 if(ePool == MODE_TRADES) iPos = OrdersTotal() - 1; else iPos = OrdersHistoryTotal() - 1; for(nOrders=0; iPos >= 0; iPos--) if( MySelect(iPos, SELECT_BY_POS, ePool)) if( op == OP_ALL || op == OrderType() ) nOrders++; return(nOrders); } if(!OrderSelect(BuyTicket, SELECT_BY_TICKET)) { if ( BuyTicket == 0) { BuyStopLoss = BC - (StopLoss * CalcPoint1); BuyTakeProfit = BC + (TakeProfit * CalcPoint1); BuyTicket = OrderSend(Symbol(),OP_BUYLIMIT,LotSize,BC,UseSlippage,BuyStopLoss,BuyTakeProfit,"Buy limit Order",MagicNumber,expiration,Green); SellTicket = 0; // counter trade// if( Bid < BuyStopLoss && SellTicket == 0 ) { if(!OrderSelect(SellTicket, SELECT_BY_TICKET)) { SellStopLoss = Bid + (StopLoss * CalcPoint1); SellTakeProfit = Bid - (TakeProfit * CalcPoint1); SellTicket = OrderSend(Symbol(),OP_SELL,LotSize,Bid,UseSlippage,SellStopLoss,SellTakeProfit,"Sell Order",MagicNumber,0,Red); BuyTicket = 0; } } } } return(BuyTicket); }
取引の機会を逃しています。
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
こんにちは、Eaを作りましたが、バックテストをすると、各ティックで同じ保留中の注文が多数作成されます。どうしたらそれを止められますか?私は一度に一つの注文が必要なだけで、そのコピーは必要ありません。
このEAを1時間足チャートで"open price only"で実行すると、コピーは作成されません。
さらに、私のEAは、買い指値が失敗した場合、売り指値を開く反転取引のオプションを持っています。また、私はそれを適切に設定されているかどうかを教えてください。どんな助けでも感謝されるでしょう。
あなたの時間をありがとうございます。