Trailingstop EAが動作しない。 - ページ 3 1234 新しいコメント William Roeder 2016.04.16 11:15 #21 FMIC: アドバイスとしては、"Ask "や "Bid "を使用せず、"OrderClosePrice() "を使用することです。これは、買いまたは売りの注文に関係なく、リアルタイムの値です。 リアルタイムではありません。Ask とBid については、複数のサーバー呼び出しの間、スリープ または長時間の計算の後など、遅延の後にRefreshRates() を 実行する必要があります。OrderClosePriceでは、OrderSelectの ときのみ更新 されます。したがって、スリープや長い計算の後(またはOnTick 呼び出しの間に注文を選択したまま)、再選択する必要があります。OrderSelect(OrderTicket(), SELECT_BY_TICKET); // Refresh OrderClosePrice Fernando Carreiro 2016.04.16 13:23 #22 WHRoeder: リアルタイムではありません。Askと Bidでは、複数のサーバー呼び出しの間、Sleepや 長い計算の後など、遅延が発生した後にRefreshRates()を 実行する必要があります。OrderClosePriceでは、OrderSelectが 行われた場合のみ更新 されます。したがって、スリープや長い計算の後(またはOnTick コールの間に注文を選択したまま)、再選択する必要があります。情報をありがとうございました。OrderClosePrice()」がバッファリングされることは知りませんでした。ですから、"OrderClosePrice()" も "Ask" / "Bid" も理想的なリアルタイムソリューションではないのでしょうね。しかし、"OrderSelect() "を行った後に "Ask"/"Bid "を使用するよりも、"OrderClosePrice() "が全体的に良い解決策であることに同意しますか?また、Real-timeソリューションが本当に必要であれば、代替案で対応できるのではないでしょうか。OrderSelect()」による注文の再選択(EDIT: ご指摘いただいたのに、最初の投稿にこれを記載するのを忘れていました。)"RefreshRate() "で "Ask"/"Bid "を指定する"MarketInfo()" で "MODE_ASK"/"MODE_BID" (古いMQL4スタイル)"SymbolInfoDouble() "で "SYMBOL_ASK"/"SYMBOL_BID"(新スタイルのMQL4+とMQL5)"SymbolInfoTick()"(これはとにかく私のEAのほとんどですでに使っています。) William Roeder 2016.04.16 16:47 #23 FMIC: しかし、"OrderSelect() "を行った後に "Ask"/"Bid "を使用するよりも、"OrderClosePrice() "が全体的に良い解決策であることに同意しますか? は絶対です。 Carl Schreiber 2016.04.17 06:18 #24 なぜ、また車輪を発明しようとするのですか?ここを 見れば、必要なものはすべて見つかるはずです。そうでない場合は、ソースコードを修正することから始めましょう。 trader3000 2016.04.18 16:58 #25 今までありがとうございました。 エラー130の問題は解決したと思いますが、私のOrderSelect関数に 深刻な問題があり、そのため時々一部の注文しか修正されない可能性が高いです。 以下は私が印刷したリストです。OrderTicket # が完全に間違っています。 このチケット番号は、私が EURAUD で開いているトレードに属しています。 すべての結果を含んでいませんが、OrderTicket 番号がトレードターミナルのペアと一致しないペアが実際に複数あります。どなたか見ていただいて、OrderSelectの何が問題なのかを教えていただけないでしょうか?ありがとうございます。2016.04.18 16:04:38.602 Trailing_v19 EURUSD,M15: ticket = 0 ticketはOrdersTotalと同じ値を出力するはずなので、私のカウンターが機能しないようです。2016.04.18 16:04:38.602 Trailing_v19 EURUSD,M15:OrderSelect = true2016.04.18 16:04:38.602 Trailing_v19 EURUSD,M15: OrdersTotal = 112016.04.18 16:04:38.202 Trailing_v19 EURUSD,M15: Selectbypos = 02016.04.18 16:04:38.202 Trailing_v19 EURUSD,M15: Selectbyticket = 12016.04.18 16:04:38.202 Trailing_v19 EURUSD,M15: OrderTicket = 50213357extern int TrailingStart=12; extern int TrailingStop=5; double stoplevel=(MarketInfo(Symbol(),MODE_STOPLEVEL))/10; int TS=TrailingStart-TrailingStop; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int init(){ return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int deinit(){ return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start(){ double Pip=Point*10; int ticket=0; if(TS<stoplevel) TrailingStart=(int)stoplevel+TrailingStop+2; Print("OrdersTotal = ",OrdersTotal()); Print("OrderSelect = ",OrderSelect(OrderTicket(),SELECT_BY_TICKET)); Print("ticket = ",ticket); Print("OrderTicket = ",OrderTicket()); Print("Selectbyticket = ",SELECT_BY_TICKET); Print("Selectbypos = ",SELECT_BY_POS); {for(int i=OrdersTotal()-1; i>=0; i--){ //I added more curly brackets{} if(OrderSelect(i,SELECT_BY_POS)){ ticket++;{ if(OrderSymbol()==_Symbol){ if(OrderType()==OP_BUY){ if(OrderSelect(OrderTicket(),SELECT_BY_TICKET)){ if((Bid-OrderOpenPrice())>(TrailingStart*Pip)){ //For now, I have changed back to Bid and Ask and will include OrderClosePrice() later on. if(TrailingStop*Pip<Bid-(TrailingStop*Pip)){ //I have added TrailingStop*Pip before the '<' if(OrderModify(OrderTicket(),OrderOpenPrice(),Bid-(TrailingStop*Pip),OrderTakeProfit(),Blue)) //I removed the ! return(0); //I replaced the Getlasterrror with a return value RefreshRates(); } } } } if(OrderType()==OP_SELL){ if(OrderSelect(OrderTicket(),SELECT_BY_TICKET)){ if((OrderOpenPrice()-Ask)>(TrailingStart*Pip)){ if(TrailingStop*Pip>Ask+(TrailingStop*Pip)){ if(OrderModify(OrderTicket(),OrderOpenPrice(),Ask+(TrailingStop*Pip),OrderTakeProfit(),Red)) return(0); RefreshRates(); } } } } } } } } return(0); } //+------------------------------------------------------------------+ Trailingstop EA won't work Total leaders Weekly performance trader3000 2016.04.20 07:59 #26 皆さんこんにちは、いつもありがとうございます。 間違いを発見し、問題が解決しました。買い注文を修正する場合、0は常にBid-TrailingStop*Pipより小さいので、これは問題ではありません。 しかし、売り注文では 0は決してAsk+Trailingstop*Pip以上にはなりません。 そこで私はこの行にor( || OrderStopLoss() )を追加しなければならなかったのです。if(OrderType()==OP_SELL){ if(OrderSelect(OrderTicket(),SELECT_BY_TICKET)){ if((OrderOpenPrice()-Ask)>(TrailingStart*Pip)){ if(OrderStopLoss()>Ask+(TrailingStop*Pip) || OrderStopLoss()==0){ //Added OrderStopLoss()==0 if(OrderModify(OrderTicket(),OrderOpenPrice(),Ask+(TrailingStop*Pip),OrderTakeProfit(),Red)) William Roeder 2016.04.20 10:38 #27 Trader3000: そのチケット番号は、私がEURAUDのために開いている取引に属しています。 OrderSelect ループでフィルタリングを行わない。別のチャートに別の通貨を追加した場合、シンボルがOrderymbolと一致しない。-MQL4フォーラム trader3000 2016.04.20 14:35 #28 WHRoeder: Trader3000: そのチケット番号は、私がEURAUDのために開いている取引に属しています。 OrderSelect ループでフィルタリングを行わない。別のチャートに別の通貨を追加した場合、シンボルがOrderymbolと一致しない。- MQL4フォーラムどうもありがとうございます。 はい、確かにOrderSelectは一部のチャートでしか動作しないので問題があります。 もう一つの問題は、取引が手動で行われるため、MagicNumberを含めることができません。 関連すると思われる部分を使用しましたが、コンパイルできません。 このエラーが表示されます。'MySelect' - function can be declared only in the global scope Trailing_v26.mq4 31 13で、31行目がこれです。bool MySelect(int iWhat, int eSelect, int ePool=MODE_TRADES){以下は、EA全体です。#property strict; extern int TrailingStart=10; extern int TrailingStop=5; double stoplevel=(MarketInfo(Symbol(),MODE_STOPLEVEL))/10; int TS=TrailingStart-TrailingStop; bool MySelect(int iWhat, int eSelect, int ePool=MODE_TRADES); //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int init(){ if(TS<stoplevel){ MessageBox("Please note: Your inputs for TrailingStart and/or TrailingStop cannot"+ "\nbe less than the minimum levels required by your broker and the"+ "\nTrailingStart has been increased automatically to "+StringConcatenate(stoplevel+TrailingStop)+" pips"); } return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int deinit(){ return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start(){ double Pip=Point*10; if(TS<stoplevel) TrailingStart=(int)stoplevel+TrailingStop; bool MySelect(int iWhat, int eSelect, int ePool=MODE_TRADES){ if (!OrderSelect(iWhat, eSelect, ePool)) return (false); if (OrderSymbol() != _Symbol) return (false); if (ePool != MODE_HISTORY) return (true); return(OrderType() <= OP_SELL); } for(int i = OrdersTotal()-1; i >= 0; i--) if (MySelect(i, SELECT_BY_POS)){ for(int iPos=OrdersHistoryTotal()-1; iPos >= 0; iPos--) if (MySelect(iPos, SELECT_BY_POS, MODE_HISTORY)){ int nextTkt = OrderTicket(); if(OrderSelect(OrderTicket(),SELECT_BY_TICKET)){ if((Bid-OrderOpenPrice())>(TrailingStart*Pip)){ if(OrderStopLoss()<Bid-(TrailingStop*Pip)){ if(OrderModify(OrderTicket(),OrderOpenPrice(),Bid-(TrailingStop*Pip),OrderTakeProfit(),Blue)) Print("Buy = ",GetLastError()); return(0); RefreshRates(); } } } } if(OrderSelect(OrderTicket(),SELECT_BY_TICKET)){ if((OrderOpenPrice()-Ask)>(TrailingStart*Pip)){ if(OrderStopLoss()>Ask+(TrailingStop*Pip) || OrderStopLoss()==0){ if(OrderModify(OrderTicket(),OrderOpenPrice(),Ask+(TrailingStop*Pip),OrderTakeProfit(),Red)) Print("Sell = ",GetLastError()); return(0); RefreshRates(); } } } } return(0); } //+------------------------------------------------------------------+ Fernando Carreiro 2016.04.20 15:58 #29 Trader3000:はい、確かにOrderSelectは一部のチャートでしか動作しないので問題があります。 もう一つの問題は、取引が手動で行われるため、MagicNumberを含めることができません。 関連すると思われるコードの部分を使用しましたが、コンパイルすることができません。私はあなたに、あなたの問題を解決するための完璧なスケルトンコードを提供し、さらにその前にそれらをリストアップしましたが、あなたはそれを無視することを選び、なぜあなたのコードがあなたの望むことをしないのかと悩み続けています。なぜでしょうか?あなたは自分のコードが動作しないことを望んでいるのでしょうか?例題を使って、自分でテストしてみてください William Roeder 2016.04.21 12:06 #30 彼はカットアンドペーストで済むと思っていて、コードを学ぶ必要がないのです。こんな簡単なエラーも聞かないと直せないらしい。'MySelect' - function can be declared only in the global scope Trailing_v26.mq4 31 13 1234 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
リアルタイムではありません。
情報をありがとうございました。OrderClosePrice()」がバッファリングされることは知りませんでした。ですから、"OrderClosePrice()" も "Ask" / "Bid" も理想的なリアルタイムソリューションではないのでしょうね。
しかし、"OrderSelect() "を行った後に "Ask"/"Bid "を使用するよりも、"OrderClosePrice() "が全体的に良い解決策であることに同意しますか?
また、Real-timeソリューションが本当に必要であれば、代替案で対応できるのではないでしょうか。
なぜ、また車輪を発明しようとするのですか?
ここを 見れば、必要なものはすべて見つかるはずです。
そうでない場合は、ソースコードを修正することから始めましょう。
今までありがとうございました。 エラー130の問題は解決したと思いますが、私のOrderSelect関数に 深刻な問題があり、そのため時々一部の注文しか修正されない可能性が高いです。 以下は私が印刷したリストです。OrderTicket # が完全に間違っています。 このチケット番号は、私が EURAUD で開いているトレードに属しています。 すべての結果を含んでいませんが、OrderTicket 番号がトレードターミナルのペアと一致しないペアが実際に複数あります。
どなたか見ていただいて、OrderSelectの何が問題なのかを教えていただけないでしょうか?ありがとうございます。
2016.04.18 16:04:38.602 Trailing_v19 EURUSD,M15: ticket = 0 ticketはOrdersTotalと同じ値を出力するはずなので、私のカウンターが機能しないようです。
2016.04.18 16:04:38.602 Trailing_v19 EURUSD,M15:OrderSelect = true
2016.04.18 16:04:38.602 Trailing_v19 EURUSD,M15: OrdersTotal = 11
2016.04.18 16:04:38.202 Trailing_v19 EURUSD,M15: Selectbypos = 0
2016.04.18 16:04:38.202 Trailing_v19 EURUSD,M15: Selectbyticket = 1
2016.04.18 16:04:38.202 Trailing_v19 EURUSD,M15: OrderTicket = 50213357
皆さんこんにちは、いつもありがとうございます。 間違いを発見し、問題が解決しました。買い注文を修正する場合、0は常にBid-TrailingStop*Pipより小さいので、これは問題ではありません。 しかし、売り注文では 0は決してAsk+Trailingstop*Pip以上にはなりません。 そこで私はこの行にor( || OrderStopLoss() )を追加しなければならなかったのです。
どうもありがとうございます。 はい、確かにOrderSelectは一部のチャートでしか動作しないので問題があります。 もう一つの問題は、取引が手動で行われるため、MagicNumberを含めることができません。 関連すると思われる部分を使用しましたが、コンパイルできません。 このエラーが表示されます。
'MySelect' - function can be declared only in the global scope Trailing_v26.mq4 31 13
で、31行目がこれです。
以下は、EA全体です。
はい、確かにOrderSelectは一部のチャートでしか動作しないので問題があります。 もう一つの問題は、取引が手動で行われるため、MagicNumberを含めることができません。 関連すると思われるコードの部分を使用しましたが、コンパイルすることができません。
私はあなたに、あなたの問題を解決するための完璧なスケルトンコードを提供し、さらにその前にそれらをリストアップしましたが、あなたはそれを無視することを選び、なぜあなたのコードがあなたの望むことをしないのかと悩み続けています。
なぜでしょうか?あなたは自分のコードが動作しないことを望んでいるのでしょうか?例題を使って、自分でテストしてみてください