コーディングのヘルプ - ページ 143 1...136137138139140141142143144145146147148149150...786 新しいコメント Mladen Rakic 2013.09.12 10:08 #1421 arroganzmaschine: mladenさん、もう一つ質問です。 すべてのオープンオーダーをチェックして、利益が-20より低い場合は、それらを閉じるにはどうすればよいのでしょうか?次のようなものですか?//int currentTicket;for(int i0=OrdersTotal()-1; i0>=0; i0--){//currentTicket = OrderSelect(i0, SELECT_BY_POS, MODE_TRADES);if(OrderProfit() <= -20) { /currentTicket = OrderSelect(i0), MOD_TRADES.OrderClose(OrderTicket(),OrderLots(),0,0, CLR_NONE);}} アロガンズマシン はい、これで大丈夫です。 利益をチェック する行だけ、こう変えてもいいかもしれませんね。 if ((OrderProfit()+OrderSwap()+OrderCommission()) <= -20) とします。 純粋な "利益 "であることを確認するためです。 arroganztrader 2013.09.12 10:15 #1422 OrderCloseでBidやAskを設定する必要があるのでしょうか?それともこの線で合っていますか? arroganztrader 2013.09.12 10:18 #1423 うーん、何かおかしい。バックテストでは、利益がマイナスになっている注文は決済されません。テスト終了時には、-230の利益のあるオープンオーダーがあります。 arroganztrader 2013.09.12 10:21 #1424 int start() { for(int i0=OrdersTotal()-1; i0>=0; i0--){ if((OrderProfit()+OrderSwap()+OrderCommission())) <= -20) { { { OrderClose(OrderTicket(),OrderLots(),0,0,CLR_NONE); } } } これではうまくいきません。 Mladen Rakic 2013.09.12 10:35 #1425 arroganzmaschine: int start(){ for(int i0=OrdersTotal()-1; i0>=0; i0--){ if((OrderProfit()+OrderSwap()+OrderCommission())) <= -20) { { { OrderClose(OrderTicket(),OrderLots(),0,0, CLR_NONE); } } } これではダメなんです。 OrderSelect()を忘れていますね(何かする前に必ず注文を選択する必要があります)。また、どのような種類の注文 を決済しようとしているのかをチェックする部分を追加するのも良いアイデアでしょう。 次のようなものです。 for(int i0=OrdersTotal()-1; i0>=0; i0--) { if (OrderSelect(u0,SELECT_BY_POS,MODE_TRADES)) if((OrderProfit()+OrderSwap()+OrderCommission()) <= -20) { if (OrderType()==OP_BUY) OrderClose(OrderTicket(),OrderLots(),Bid,0,CLR_NONE); if (OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Ask,0,CLR_NONE); } Dawid Ciechowski 2013.09.12 12:13 #1426 TrendHistogramインジケータでヒストグラムをバーに変換するのを誰か助けてくれませんか?添付のTrendFilterインジケータと同じバーを表示させたいのですが。 TrendHistogramが正しく動作するためには、EMA_Adaptiveインディケータが必要です。 ファイル: trendfilter.mq4 4 kb trendhistogram.mq4 5 kb ema_adaptive_v22price.mq4 5 kb Mladen Rakic 2013.09.12 14:13 #1427 freakout: TrendHistogramインジケータでヒストグラムをバーに変換するのを誰か助けてくれませんか?添付のTrendFilterインジケータと同じバーを取得したいのですが TrendHistogramが正しく動作するためにはEMA_Adaptiveインジケータが必要です フリークアウト はい、どうぞ DrawAsBarsをtrueに設定すると、説明したように描画されます。このパラメータを falseにすると、オリジナルと同じように動作します。 ファイル: trendhistogram_2.mq4 5 kb Amol Kadkotkar 2013.09.12 14:37 #1428 こんにちは。 バックテストは良いですが、EAがデモ/リアル口座で 動作しない場合、このコードを編集するために誰かが私を助けることができます。 //+------------------------------------------------------------------+ //| ハンザ123トレーダー v1 //+------------------------------------------------------------------+ #インクルード #プロパティ コピーライト "hans123" #property リンク "" // プログラム作成者: fukinagashi extern int BeginSession1=6;(backtest 中に編集して全セッションに0を設定し、最終的な結果を得ました) extern int EndSession1=10; extern int BeginSession2=10; extern int EndSession2=14; extern double TrailingStop = 0; extern double TakeProfit = 452; extern double TrailingStop = 0; extern double TakeProfit = 452; extern double InitialStopLoss=40; extern double TakeProfit = 452; extern double InitialStopLoss=40; double Lots = 0.1; datetime bartime = 0; double Slippage=3; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { int cnt, ticket, err, i, j, cmd; int MagicNumber; double ts, tp, LowestPrice, HighestPrice, Price; bool Order[5]; 文字列の設定 datetime Validity=0; if(IsTesting() && Bars<100) return(0); MagicNumber = 50000 + func_Symbol2Val(Symbol())*100; setup="H123_"+ Symbol(); if (バータイム == タイム[0]) { (バータイム == タイム[0]) return(0); } else { bartime = Time[0]。 } for(cnt=OrdersTotal();cnt>=0;cnt--) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(OrderType()==OP_BUY && (OrderMagicNumber()==MagicNumber+1 || OrderMagicNumber()==MagicNumber+3)) { (オーダーマジックナンバー()==MagicNumber+3)) if(TimeDay(OrderOpenTime())!=TimeDay(Time[0])) { {. Print("."); OrderClose(OrderTicket(), Lots, Bid, 3, Red); if (err>1) { Print("Error closing buy order [" + setup + "]:(" + err + ") " + ErrorDescription(err)); }. } else if (OrderStopLoss()==0){ if (TakeProfit>0) { tp=OrderOpenPrice()+TakeProfit*Point; } else { tp=0; }. if (InitialStopLoss>0) { ts=OrderOpenPrice()-InitialStopLoss*Point.}else{ts=0,0,0,0,0,0,0}。 } else { ts=0; } OrderModify(OrderTicket(),OrderOpenPrice(),ts,tp,0,White)。 if (err>1) { Print("Error modifying Buy order [" + setup + "]:(" + err + ") " + ErrorDescription(err)); }. } else if (TrailingStop>0) {.ts = Bid-Point*TrailingStop; if (オーダーストップ・ロス()0)注文変更(OrderTicket(),OrderOpenPrice(),ts,OrderTakeProfit(),0,White); } } else if(OrderType()==OP_SELL && (OrderMagicNumber()==MagicNumber+2 || OrderMagicNumber()==MagicNumber+4)) { (注文番号()==MagicNumber+2)) if(TimeDay(OrderOpenTime())!=TimeDay(Time[0])) { {. Print("."); OrderClose(OrderTicket(), Lots, Ask, 3, Red); if (err>1) { Print("売り注文の決済エラー [" + setup + "]:(" + err + ") " + ErrorDescription(err)); }. } else if (OrderStopLoss()==0){ if (TakeProfit>0) { tp=OrderOpenPrice()-TakeProfit*Point; } else { tp=0; }. if (InitialStopLoss>0) { ts=OrderOpenPrice()+InitialStopLoss*Point.}else{ts=0,0,0,0,0,0,0}。 } else { ts=0; } OrderModify(OrderTicket(),OrderOpenPrice(),ts,tp,0,White)。 if (err>1) { Print("Error modifying Sell order [" + setup + "]:(" + err + ") " + ErrorDescription(err)); }. } else if (TrailingStop>0) {.ts = Ask+Point*TrailingStop; if (OrderStopLoss()>ts && OrderProfit()>0)注文変更(OrderTicket(),OrderOpenPrice(),ts,OrderTakeProfit(),0,White); } } } if(AccountFreeMargin()<(1000*Lots)) return(0); Validity=StrToTime(TimeYear(Time[0]) + ".".+ TimeMonth(Time[0]) + ".".+ TimeDay(Time[0]) + " 23:59"); if (TimeHour(Time[0])==EndSession1 && TimeMinute(Time[0])==0){ LowestPrice=Low[Lowest(NULL, PERIOD_M5, MODE_LOW, 80, 0)]; HighestPrice=High; //// BUYSTOP/SELLSTOP 価格が Bid/Ask に近づきすぎるのを避けるため、次のようにする必要があります。 //// この場合、130の無効なストップが表示されます。 //// OP_BUYとOP_SELLを適切に変更するよう実験してみましたが、結果は満足のいくものではありませんでした。 //if (HighestPrice+5*Point<Ask+Spread*Point){。 // cmd=OP_BUY。 //価格=Ask; //} else { cmd=OP_BUYSTOP; 価格=HighestPrice+5*Point。 //} ticket=OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+1,Validity,Green).OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+1,Validity,Green); err = GetLastError()。 if (err>1) { Print("Error modifying Sell order [" + setup + "]:(" + err + ") " + ErrorDescription(err)); }. //if (最安値-5*ポイント>ビッド-スプレッド*ポイント) { // cmd=OP_SELL // cmd=OP_SELL; //価格=ビッド //} else { cmd=OP_SELLSTOP; 価格=最低価格-5*ポイント。 //} ticket=OrderSendExtended(Symbol(),OP_SELLSTOP,Lots,Price,Slippage,0,0,setup,MagicNumber+2,Validity,Green); err = GetLastError()。 if (err>1) { Print("Error modifying Sell order [" + setup + "]:(" + err + ") " + ErrorDescription(err)); }. } if (TimeHour(Time[0])==EndSession2 && TimeMinute(Time[0])==0){ LowestPrice=Low[Lowest(NULL, PERIOD_M5, MODE_LOW, 80, 0)]; HighestPrice=High。 //if (HighestPrice+5*Point<Ask+Spread*Point){。 // cmd=OP_BUY; // Price=Ask; //} else { cmd=OP_BUYSTOP; 価格=HighestPrice+5*Point。 //} ticket=OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+3,Validity,Green).OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+3,Validity,Green); err = GetLastError()。 if (err>1) { Print("Error modifying Sell order [" + setup + "]:(" + err + ") " + ErrorDescription(err)); }. //if (最安値-5*ポイント>ビッド-スプレッド*ポイント) { // cmd=OP_SELL // cmd=OP_SELL; //価格=ビッド //} else { cmd=OP_SELLSTOP; 価格=最低価格-5*ポイント。 //} ticket=OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+4,Validity,Green).OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+4,Validity,Green); err = GetLastError()。 if (err>1) { Print("Error modifying Sell order [" + setup + "]:(" + err + ") " + ErrorDescription(err)); }. } } int func_Symbol2Val(stringシンボル){ { (シンボル) if(symbol=="AUDUSD"){return(01)。 } else if(symbol=="CHFJPY") { return(10); } else if(symbol=="EURAUD") { return(10); } else if(symbol=="EURCAD"){リターン(11); } else if(symbol=="EURCHF"){リターン(12); } else if(symbol=="EURGBP"){リターン(13); } else if(symbol=="EURJPY"){リターン(14); } else if(symbol=="EURUSDm"){リターン(15); } else if(symbol=="GBPCHF"){リターン(20); } else if(symbol=="GBPJPY"){リターン(21); } else if(symbol=="GBPUSD"){リターン(22); } else if(symbol=="USDCAD"){リターン(40); } else if(symbol=="USDCHF"){リターン(41); } else if(symbol=="USDJPY"){リターン(42); } else if(symbol=="GOLD"){リターン(90); } else { Comment("予期せぬシンボル"); return(0); } } int OrderSendExtended(string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment, int magic, datetime expiration=0, color arrow_color=CLR_NONE) { (シンボル, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, 文字列コメント) datetime OldCurTime; int timeout=30; int ticket; OldCurTime=CurTime()。 while (GlobalVariableCheck("InTrade") && !IsTradeAllowed()) { {. if(OldCurTime+timeout<=CurTime()) { { (OldCurTime+timeout<=CurTime())です。 Print("OrderSendExtended()でエラーが発生しました。タイムアウトが発生しました"); return(0); } Sleep(1000); } GlobalVariableSet("InTrade", CurTime()); // ロックインジケータの設定 ticket = OrderSend(symbol, cmd, volume, price, slippage, stoploss, takeprofit, comment, magic, expiration, arrow_color); GlobalVariableDel("InTrade"); // ロックインジケータの解除 return(チケット); } Coding help [警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 オジャラEA Mladen Rakic 2013.09.12 15:43 #1429 ccd: こんにちは。バックテストは良いのですが、EAがデモ/リアル口座で動作しないので、どなたかこのコードの編集を手伝っていただけませんか? //+------------------------------------------------------------------+ //| ハンザ123トレーダー v1 //+------------------------------------------------------------------+ #インクルード #プロパティ コピーライト "hans123" #property リンク "" // プログラム作成者: fukinagashi extern int BeginSession1=6;(backtest 中に編集して全セッションに0を設定し、最終的な結果を得ました) extern int EndSession1=10; extern int BeginSession2=10; extern int EndSession2=14; extern double TrailingStop = 0; extern double TakeProfit = 452; extern double TrailingStop = 0; extern double TakeProfit = 452; extern double InitialStopLoss=40; extern double TakeProfit = 452; extern double InitialStopLoss=40; double Lots = 0.1; datetime bartime = 0; double Slippage=3; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { int cnt, ticket, err, i, j, cmd; int MagicNumber; double ts, tp, LowestPrice, HighestPrice, Price; bool Order[5]; 文字列の設定 datetime Validity=0; if(IsTesting() && Bars<100) return(0); MagicNumber = 50000 + func_Symbol2Val(Symbol())*100; setup="H123_"+ Symbol(); if (バータイム == タイム[0]) { (バータイム == タイム[0]) return(0); } else { bartime = Time[0]。 } for(cnt=OrdersTotal();cnt>=0;cnt--) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(OrderType()==OP_BUY && (OrderMagicNumber()==MagicNumber+1 || OrderMagicNumber()==MagicNumber+3)) { (オーダーマジックナンバー()==MagicNumber+3)) if(TimeDay(OrderOpenTime())!=TimeDay(Time[0])) { {. Print("."); OrderClose(OrderTicket(), Lots, Bid, 3, Red); if (err>1) { Print("Error closing buy order [" + setup + "]:(" + err + ") " + ErrorDescription(err)); }. } else if (OrderStopLoss()==0){ if (TakeProfit>0) { tp=OrderOpenPrice()+TakeProfit*Point; } else { tp=0; }. if (InitialStopLoss>0) { ts=OrderOpenPrice()-InitialStopLoss*Point.}else{ts=0,0,0,0,0,0,0}。 } else { ts=0; } OrderModify(OrderTicket(),OrderOpenPrice(),ts,tp,0,White)。 if (err>1) { Print("Error modifying Buy order [" + setup + "]:(" + err + ") " + ErrorDescription(err)); }. } else if (TrailingStop>0) {.ts = Bid-Point*TrailingStop; if (オーダーストップ・ロス()0)注文変更(OrderTicket(),OrderOpenPrice(),ts,OrderTakeProfit(),0,White); } } else if(OrderType()==OP_SELL && (OrderMagicNumber()==MagicNumber+2 || OrderMagicNumber()==MagicNumber+4)) { (注文番号()==MagicNumber+2)) if(TimeDay(OrderOpenTime())!=TimeDay(Time[0])) { {. Print("."); OrderClose(OrderTicket(), Lots, Ask, 3, Red); if (err>1) { Print("売り注文の決済エラー [" + setup + "]:(" + err + ") " + ErrorDescription(err)); }. } else if (OrderStopLoss()==0){ if (TakeProfit>0) { tp=OrderOpenPrice()-TakeProfit*Point; } else { tp=0; }. if (InitialStopLoss>0) { ts=OrderOpenPrice()+InitialStopLoss*Point.}else{ts=0,0,0,0,0,0,0}。 } else { ts=0; } OrderModify(OrderTicket(),OrderOpenPrice(),ts,tp,0,White)。 if (err>1) { Print("Error modifying Sell order [" + setup + "]:(" + err + ") " + ErrorDescription(err)); }. } else if (TrailingStop>0) {.ts = Ask+Point*TrailingStop; if (OrderStopLoss()>ts && OrderProfit()>0)注文変更(OrderTicket(),OrderOpenPrice(),ts,OrderTakeProfit(),0,White); } } } if(AccountFreeMargin()<(1000*Lots)) return(0); Validity=StrToTime(TimeYear(Time[0]) + ".".+ TimeMonth(Time[0]) + ".".+ TimeDay(Time[0]) + " 23:59"); if (TimeHour(Time[0])==EndSession1 && TimeMinute(Time[0])==0){ LowestPrice=Low[Lowest(NULL, PERIOD_M5, MODE_LOW, 80, 0)]; HighestPrice=High; //// BUYSTOP/SELLSTOP 価格が Bid/Ask に近づきすぎるのを避けるため、次のようにする必要があります。 //// この場合、130の無効なストップが表示されます。 //// OP_BUYとOP_SELLを適切に変更するよう実験してみましたが、結果は満足のいくものではありませんでした。 //if (HighestPrice+5*Point<Ask+Spread*Point){。 // cmd=OP_BUY。 //価格=Ask; //} else { cmd=OP_BUYSTOP; 価格=HighestPrice+5*Point。 //} ticket=OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+1,Validity,Green).OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+1,Validity,Green); err = GetLastError()。 if (err>1) { Print("Error modifying Sell order [" + setup + "]:(" + err + ") " + ErrorDescription(err)); }. //if (最安値-5*ポイント>ビッド-スプレッド*ポイント) { // cmd=OP_SELL // cmd=OP_SELL。 //価格=ビッド //} else { cmd=OP_SELLSTOP; 価格=最低価格-5*ポイント。 //} ticket=OrderSendExtended(Symbol(),OP_SELLSTOP,Lots,Price,Slippage,0,0,setup,MagicNumber+2,Validity,Green); err = GetLastError()。 if (err>1) { Print("Error modifying Sell order [" + setup + "]:(" + err + ") " + ErrorDescription(err)); }. } if (TimeHour(Time[0])==EndSession2 && TimeMinute(Time[0])==0){ LowestPrice=Low[Lowest(NULL, PERIOD_M5, MODE_LOW, 80, 0)]; HighestPrice=High。 //if (HighestPrice+5*Point<Ask+Spread*Point){。 // cmd=OP_BUY; // Price=Ask; //} else { cmd=OP_BUYSTOP; 価格=HighestPrice+5*Point。 //} ticket=OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+3,Validity,Green).OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+3,Validity,Green); err = GetLastError()。 if (err>1) { Print("Error modifying Sell order [" + setup + "]:(" + err + ") " + ErrorDescription(err)); }. //if (最安値-5*ポイント>ビッド-スプレッド*ポイント) { // cmd=OP_SELL // cmd=OP_SELL; //価格=ビッド //} else { cmd=OP_SELLSTOP; 価格=最低価格-5*ポイント。 //} ticket=OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+4,Validity,Green).OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+4,Validity,Green); err = GetLastError()。 if (err>1) { Print("Error modifying Sell order [" + setup + "]:(" + err + ") " + ErrorDescription(err)); }. } } int func_Symbol2Val(stringシンボル){ { (シンボル) if(symbol=="AUDUSD"){return(01)。 } else if(symbol=="CHFJPY") { return(10); } else if(symbol=="EURAUD") { return(10); } else if(symbol=="EURCAD"){リターン(11); } else if(symbol=="EURCHF"){リターン(12); } else if(symbol=="EURGBP"){リターン(13); } else if(symbol=="EURJPY"){リターン(14); } else if(symbol=="EURUSDm"){リターン(15); } else if(symbol=="GBPCHF"){リターン(20); } else if(symbol=="GBPJPY"){リターン(21); } else if(symbol=="GBPUSD"){リターン(22); } else if(symbol=="USDCAD"){リターン(40); } else if(symbol=="USDCHF"){リターン(41); } else if(symbol=="USDJPY"){リターン(42); } else if(symbol=="GOLD"){リターン(90); } else { Comment("予期せぬシンボル"); return(0); } } int OrderSendExtended(string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment, int magic, datetime expiration=0, color arrow_color=CLR_NONE) { (シンボル, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, 文字列コメント) datetime OldCurTime; int timeout=30; int ticket; OldCurTime=CurTime()。 while (GlobalVariableCheck("InTrade") && !IsTradeAllowed()) { {. if(OldCurTime+timeout<=CurTime()) { { (OldCurTime+timeout<=CurTime())です。 Print("OrderSendExtended()でエラーが発生しました。タイムアウトが発生しました"); return(0); } Sleep(1000); } GlobalVariableSet("InTrade", CurTime()); // ロックインジケータの設定 ticket = OrderSend(symbol, cmd, volume, price, slippage, stoploss, takeprofit, comment, magic, expiration, arrow_color); GlobalVariableDel("InTrade"); // ロックインジケータの解除 return(ticket)。 } InitialStopLossを10倍にして、ライブ口座で試してみてください。そのEAは4桁のブローカー用に書かれています。 ______________________ 追記:TakeProfitも10倍すると一貫してpipsになりますが、この数値でテストすると、バックテスト時と同じ結果にはなりません(単にバックテストでは、デモ口座でも ライブ口座でも許されない値をこの2つに使うことができたからです)。 zigflip 2013.09.13 06:00 #1430 mladen: zigflip 最後の2つのpsarは、"psarの最後の上/下ペア "または "最後の2つのバー "のように? メールマガジンを購読していたはずなのに、返信が遅くなり申し訳ありません。 最後のpsarのペアのことです。 私は主に最後のpsarを監視したいのですが、上限/下限の変更が発生したときに最後の2つのレベルが必要になり、うーん、多分Xバーバックでなければなりません...ああ、私は今あなたが言っていることを参照してください、第二の思考でおそらく上限/下限の最後のセット、それは最初の新しい方向のpsarの到着時に最後の変更にトリミング この上のあなたの助けをいただきありがとうございます。 1...136137138139140141142143144145146147148149150...786 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
mladenさん、もう一つ質問です。
すべてのオープンオーダーをチェックして、利益が-20より低い場合は、それらを閉じるにはどうすればよいのでしょうか?
次のようなものですか?
//int currentTicket;
for(int i0=OrdersTotal()-1; i0>=0; i0--){
//currentTicket = OrderSelect(i0, SELECT_BY_POS, MODE_TRADES);
if(OrderProfit() <= -20) { /currentTicket = OrderSelect(i0), MOD_TRADES.
OrderClose(OrderTicket(),OrderLots(),0,0, CLR_NONE);
}
}アロガンズマシン
はい、これで大丈夫です。
利益をチェック する行だけ、こう変えてもいいかもしれませんね。
if ((OrderProfit()+OrderSwap()+OrderCommission()) <= -20) とします。
純粋な "利益 "であることを確認するためです。
OrderCloseでBidやAskを設定する必要があるのでしょうか?それともこの線で合っていますか?
うーん、何かおかしい。バックテストでは、利益がマイナスになっている注文は決済されません。テスト終了時には、-230の利益のあるオープンオーダーがあります。
int start()
{
for(int i0=OrdersTotal()-1; i0>=0; i0--){
if((OrderProfit()+OrderSwap()+OrderCommission())) <= -20) { { {
OrderClose(OrderTicket(),OrderLots(),0,0,CLR_NONE);
}
}
}
これではうまくいきません。
int start()
{
for(int i0=OrdersTotal()-1; i0>=0; i0--){
if((OrderProfit()+OrderSwap()+OrderCommission())) <= -20) { { {
OrderClose(OrderTicket(),OrderLots(),0,0, CLR_NONE);
}
}
}
これではダメなんです。OrderSelect()を忘れていますね(何かする前に必ず注文を選択する必要があります)。また、どのような種類の注文 を決済しようとしているのかをチェックする部分を追加するのも良いアイデアでしょう。
次のようなものです。
if (OrderSelect(u0,SELECT_BY_POS,MODE_TRADES))
if((OrderProfit()+OrderSwap()+OrderCommission()) <= -20)
{
if (OrderType()==OP_BUY) OrderClose(OrderTicket(),OrderLots(),Bid,0,CLR_NONE);
if (OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Ask,0,CLR_NONE);
}
TrendHistogramインジケータでヒストグラムをバーに変換するのを誰か助けてくれませんか?添付のTrendFilterインジケータと同じバーを表示させたいのですが。
TrendHistogramが正しく動作するためには、EMA_Adaptiveインディケータが必要です。
TrendHistogramインジケータでヒストグラムをバーに変換するのを誰か助けてくれませんか?添付のTrendFilterインジケータと同じバーを取得したいのですが TrendHistogramが正しく動作するためにはEMA_Adaptiveインジケータが必要です
フリークアウト
はい、どうぞ
DrawAsBarsをtrueに設定すると、説明したように描画されます。このパラメータを falseにすると、オリジナルと同じように動作します。
こんにちは。
バックテストは良いですが、EAがデモ/リアル口座で 動作しない場合、このコードを編集するために誰かが私を助けることができます。
//+------------------------------------------------------------------+
//| ハンザ123トレーダー v1
//+------------------------------------------------------------------+
#インクルード
#プロパティ コピーライト "hans123"
#property リンク ""
// プログラム作成者: fukinagashi
extern int BeginSession1=6;(backtest 中に編集して全セッションに0を設定し、最終的な結果を得ました)
extern int EndSession1=10;
extern int BeginSession2=10;
extern int EndSession2=14;
extern double TrailingStop = 0;
extern double TakeProfit = 452; extern double TrailingStop = 0; extern double TakeProfit = 452;
extern double InitialStopLoss=40; extern double TakeProfit = 452; extern double InitialStopLoss=40;
double Lots = 0.1;
datetime bartime = 0;
double Slippage=3;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
int cnt, ticket, err, i, j, cmd;
int MagicNumber;
double ts, tp, LowestPrice, HighestPrice, Price;
bool Order[5];
文字列の設定
datetime Validity=0;
if(IsTesting() && Bars<100) return(0);
MagicNumber = 50000 + func_Symbol2Val(Symbol())*100;
setup="H123_"+ Symbol();
if (バータイム == タイム[0]) { (バータイム == タイム[0])
return(0);
} else {
bartime = Time[0]。
}
for(cnt=OrdersTotal();cnt>=0;cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()==OP_BUY && (OrderMagicNumber()==MagicNumber+1 || OrderMagicNumber()==MagicNumber+3)) { (オーダーマジックナンバー()==MagicNumber+3))
if(TimeDay(OrderOpenTime())!=TimeDay(Time[0])) { {.
Print(".");
OrderClose(OrderTicket(), Lots, Bid, 3, Red);
if (err>1) { Print("Error closing buy order [" + setup + "]:(" + err + ") " + ErrorDescription(err)); }.
} else if (OrderStopLoss()==0){
if (TakeProfit>0) { tp=OrderOpenPrice()+TakeProfit*Point;
} else { tp=0; }.
if (InitialStopLoss>0) { ts=OrderOpenPrice()-InitialStopLoss*Point.}else{ts=0,0,0,0,0,0,0}。
} else { ts=0; }
OrderModify(OrderTicket(),OrderOpenPrice(),ts,tp,0,White)。
if (err>1) { Print("Error modifying Buy order [" + setup + "]:(" + err + ") " + ErrorDescription(err)); }.
} else if (TrailingStop>0) {.ts = Bid-Point*TrailingStop;
if (オーダーストップ・ロス()0)注文変更(OrderTicket(),OrderOpenPrice(),ts,OrderTakeProfit(),0,White);
}
} else if(OrderType()==OP_SELL && (OrderMagicNumber()==MagicNumber+2 || OrderMagicNumber()==MagicNumber+4)) { (注文番号()==MagicNumber+2))
if(TimeDay(OrderOpenTime())!=TimeDay(Time[0])) { {.
Print(".");
OrderClose(OrderTicket(), Lots, Ask, 3, Red);
if (err>1) { Print("売り注文の決済エラー [" + setup + "]:(" + err + ") " + ErrorDescription(err)); }.
} else if (OrderStopLoss()==0){
if (TakeProfit>0) { tp=OrderOpenPrice()-TakeProfit*Point;
} else { tp=0; }.
if (InitialStopLoss>0) { ts=OrderOpenPrice()+InitialStopLoss*Point.}else{ts=0,0,0,0,0,0,0}。
} else { ts=0; }
OrderModify(OrderTicket(),OrderOpenPrice(),ts,tp,0,White)。
if (err>1) { Print("Error modifying Sell order [" + setup + "]:(" + err + ") " + ErrorDescription(err)); }.
} else if (TrailingStop>0) {.ts = Ask+Point*TrailingStop;
if (OrderStopLoss()>ts && OrderProfit()>0)注文変更(OrderTicket(),OrderOpenPrice(),ts,OrderTakeProfit(),0,White);
}
}
}
if(AccountFreeMargin()<(1000*Lots)) return(0);
Validity=StrToTime(TimeYear(Time[0]) + ".".+ TimeMonth(Time[0]) + ".".+ TimeDay(Time[0]) + " 23:59");
if (TimeHour(Time[0])==EndSession1 && TimeMinute(Time[0])==0){
LowestPrice=Low[Lowest(NULL, PERIOD_M5, MODE_LOW, 80, 0)];
HighestPrice=High;
//// BUYSTOP/SELLSTOP 価格が Bid/Ask に近づきすぎるのを避けるため、次のようにする必要があります。
//// この場合、130の無効なストップが表示されます。
//// OP_BUYとOP_SELLを適切に変更するよう実験してみましたが、結果は満足のいくものではありませんでした。
//if (HighestPrice+5*Point<Ask+Spread*Point){。
// cmd=OP_BUY。
//価格=Ask;
//} else {
cmd=OP_BUYSTOP;
価格=HighestPrice+5*Point。
//}
ticket=OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+1,Validity,Green).OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+1,Validity,Green);
err = GetLastError()。
if (err>1) { Print("Error modifying Sell order [" + setup + "]:(" + err + ") " + ErrorDescription(err)); }.
//if (最安値-5*ポイント>ビッド-スプレッド*ポイント) { // cmd=OP_SELL
// cmd=OP_SELL;
//価格=ビッド
//} else {
cmd=OP_SELLSTOP;
価格=最低価格-5*ポイント。
//}
ticket=OrderSendExtended(Symbol(),OP_SELLSTOP,Lots,Price,Slippage,0,0,setup,MagicNumber+2,Validity,Green);
err = GetLastError()。
if (err>1) { Print("Error modifying Sell order [" + setup + "]:(" + err + ") " + ErrorDescription(err)); }.
}
if (TimeHour(Time[0])==EndSession2 && TimeMinute(Time[0])==0){
LowestPrice=Low[Lowest(NULL, PERIOD_M5, MODE_LOW, 80, 0)];
HighestPrice=High。
//if (HighestPrice+5*Point<Ask+Spread*Point){。
// cmd=OP_BUY;
// Price=Ask;
//} else {
cmd=OP_BUYSTOP;
価格=HighestPrice+5*Point。
//}
ticket=OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+3,Validity,Green).OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+3,Validity,Green);
err = GetLastError()。
if (err>1) { Print("Error modifying Sell order [" + setup + "]:(" + err + ") " + ErrorDescription(err)); }.
//if (最安値-5*ポイント>ビッド-スプレッド*ポイント) { // cmd=OP_SELL
// cmd=OP_SELL;
//価格=ビッド
//} else {
cmd=OP_SELLSTOP;
価格=最低価格-5*ポイント。
//}
ticket=OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+4,Validity,Green).OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+4,Validity,Green);
err = GetLastError()。
if (err>1) { Print("Error modifying Sell order [" + setup + "]:(" + err + ") " + ErrorDescription(err)); }.
}
}
int func_Symbol2Val(stringシンボル){ { (シンボル)
if(symbol=="AUDUSD"){return(01)。
} else if(symbol=="CHFJPY") { return(10);
} else if(symbol=="EURAUD") { return(10);
} else if(symbol=="EURCAD"){リターン(11);
} else if(symbol=="EURCHF"){リターン(12);
} else if(symbol=="EURGBP"){リターン(13);
} else if(symbol=="EURJPY"){リターン(14);
} else if(symbol=="EURUSDm"){リターン(15);
} else if(symbol=="GBPCHF"){リターン(20);
} else if(symbol=="GBPJPY"){リターン(21);
} else if(symbol=="GBPUSD"){リターン(22);
} else if(symbol=="USDCAD"){リターン(40);
} else if(symbol=="USDCHF"){リターン(41);
} else if(symbol=="USDJPY"){リターン(42);
} else if(symbol=="GOLD"){リターン(90);
} else { Comment("予期せぬシンボル"); return(0);
}
}
int OrderSendExtended(string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment, int magic, datetime expiration=0, color arrow_color=CLR_NONE) { (シンボル, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, 文字列コメント)
datetime OldCurTime;
int timeout=30;
int ticket;
OldCurTime=CurTime()。
while (GlobalVariableCheck("InTrade") && !IsTradeAllowed()) { {.
if(OldCurTime+timeout<=CurTime()) { { (OldCurTime+timeout<=CurTime())です。
Print("OrderSendExtended()でエラーが発生しました。タイムアウトが発生しました");
return(0);
}
Sleep(1000);
}
GlobalVariableSet("InTrade", CurTime()); // ロックインジケータの設定
ticket = OrderSend(symbol, cmd, volume, price, slippage, stoploss, takeprofit, comment, magic, expiration, arrow_color);
GlobalVariableDel("InTrade"); // ロックインジケータの解除
return(チケット);
}
こんにちは。
バックテストは良いのですが、EAがデモ/リアル口座で動作しないので、どなたかこのコードの編集を手伝っていただけませんか?
//+------------------------------------------------------------------+
//| ハンザ123トレーダー v1
//+------------------------------------------------------------------+
#インクルード
#プロパティ コピーライト "hans123"
#property リンク ""
// プログラム作成者: fukinagashi
extern int BeginSession1=6;(backtest 中に編集して全セッションに0を設定し、最終的な結果を得ました)
extern int EndSession1=10;
extern int BeginSession2=10;
extern int EndSession2=14;
extern double TrailingStop = 0;
extern double TakeProfit = 452; extern double TrailingStop = 0; extern double TakeProfit = 452;
extern double InitialStopLoss=40; extern double TakeProfit = 452; extern double InitialStopLoss=40;
double Lots = 0.1;
datetime bartime = 0;
double Slippage=3;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
int cnt, ticket, err, i, j, cmd;
int MagicNumber;
double ts, tp, LowestPrice, HighestPrice, Price;
bool Order[5];
文字列の設定
datetime Validity=0;
if(IsTesting() && Bars<100) return(0);
MagicNumber = 50000 + func_Symbol2Val(Symbol())*100;
setup="H123_"+ Symbol();
if (バータイム == タイム[0]) { (バータイム == タイム[0])
return(0);
} else {
bartime = Time[0]。
}
for(cnt=OrdersTotal();cnt>=0;cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()==OP_BUY && (OrderMagicNumber()==MagicNumber+1 || OrderMagicNumber()==MagicNumber+3)) { (オーダーマジックナンバー()==MagicNumber+3))
if(TimeDay(OrderOpenTime())!=TimeDay(Time[0])) { {.
Print(".");
OrderClose(OrderTicket(), Lots, Bid, 3, Red);
if (err>1) { Print("Error closing buy order [" + setup + "]:(" + err + ") " + ErrorDescription(err)); }.
} else if (OrderStopLoss()==0){
if (TakeProfit>0) { tp=OrderOpenPrice()+TakeProfit*Point;
} else { tp=0; }.
if (InitialStopLoss>0) { ts=OrderOpenPrice()-InitialStopLoss*Point.}else{ts=0,0,0,0,0,0,0}。
} else { ts=0; }
OrderModify(OrderTicket(),OrderOpenPrice(),ts,tp,0,White)。
if (err>1) { Print("Error modifying Buy order [" + setup + "]:(" + err + ") " + ErrorDescription(err)); }.
} else if (TrailingStop>0) {.ts = Bid-Point*TrailingStop;
if (オーダーストップ・ロス()0)注文変更(OrderTicket(),OrderOpenPrice(),ts,OrderTakeProfit(),0,White);
}
} else if(OrderType()==OP_SELL && (OrderMagicNumber()==MagicNumber+2 || OrderMagicNumber()==MagicNumber+4)) { (注文番号()==MagicNumber+2))
if(TimeDay(OrderOpenTime())!=TimeDay(Time[0])) { {.
Print(".");
OrderClose(OrderTicket(), Lots, Ask, 3, Red);
if (err>1) { Print("売り注文の決済エラー [" + setup + "]:(" + err + ") " + ErrorDescription(err)); }.
} else if (OrderStopLoss()==0){
if (TakeProfit>0) { tp=OrderOpenPrice()-TakeProfit*Point;
} else { tp=0; }.
if (InitialStopLoss>0) { ts=OrderOpenPrice()+InitialStopLoss*Point.}else{ts=0,0,0,0,0,0,0}。
} else { ts=0; }
OrderModify(OrderTicket(),OrderOpenPrice(),ts,tp,0,White)。
if (err>1) { Print("Error modifying Sell order [" + setup + "]:(" + err + ") " + ErrorDescription(err)); }.
} else if (TrailingStop>0) {.ts = Ask+Point*TrailingStop;
if (OrderStopLoss()>ts && OrderProfit()>0)注文変更(OrderTicket(),OrderOpenPrice(),ts,OrderTakeProfit(),0,White);
}
}
}
if(AccountFreeMargin()<(1000*Lots)) return(0);
Validity=StrToTime(TimeYear(Time[0]) + ".".+ TimeMonth(Time[0]) + ".".+ TimeDay(Time[0]) + " 23:59");
if (TimeHour(Time[0])==EndSession1 && TimeMinute(Time[0])==0){
LowestPrice=Low[Lowest(NULL, PERIOD_M5, MODE_LOW, 80, 0)];
HighestPrice=High;
//// BUYSTOP/SELLSTOP 価格が Bid/Ask に近づきすぎるのを避けるため、次のようにする必要があります。
//// この場合、130の無効なストップが表示されます。
//// OP_BUYとOP_SELLを適切に変更するよう実験してみましたが、結果は満足のいくものではありませんでした。
//if (HighestPrice+5*Point<Ask+Spread*Point){。
// cmd=OP_BUY。
//価格=Ask;
//} else {
cmd=OP_BUYSTOP;
価格=HighestPrice+5*Point。
//}
ticket=OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+1,Validity,Green).OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+1,Validity,Green);
err = GetLastError()。
if (err>1) { Print("Error modifying Sell order [" + setup + "]:(" + err + ") " + ErrorDescription(err)); }.
//if (最安値-5*ポイント>ビッド-スプレッド*ポイント) { // cmd=OP_SELL
// cmd=OP_SELL。
//価格=ビッド
//} else {
cmd=OP_SELLSTOP;
価格=最低価格-5*ポイント。
//}
ticket=OrderSendExtended(Symbol(),OP_SELLSTOP,Lots,Price,Slippage,0,0,setup,MagicNumber+2,Validity,Green);
err = GetLastError()。
if (err>1) { Print("Error modifying Sell order [" + setup + "]:(" + err + ") " + ErrorDescription(err)); }.
}
if (TimeHour(Time[0])==EndSession2 && TimeMinute(Time[0])==0){
LowestPrice=Low[Lowest(NULL, PERIOD_M5, MODE_LOW, 80, 0)];
HighestPrice=High。
//if (HighestPrice+5*Point<Ask+Spread*Point){。
// cmd=OP_BUY;
// Price=Ask;
//} else {
cmd=OP_BUYSTOP;
価格=HighestPrice+5*Point。
//}
ticket=OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+3,Validity,Green).OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+3,Validity,Green);
err = GetLastError()。
if (err>1) { Print("Error modifying Sell order [" + setup + "]:(" + err + ") " + ErrorDescription(err)); }.
//if (最安値-5*ポイント>ビッド-スプレッド*ポイント) { // cmd=OP_SELL
// cmd=OP_SELL;
//価格=ビッド
//} else {
cmd=OP_SELLSTOP;
価格=最低価格-5*ポイント。
//}
ticket=OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+4,Validity,Green).OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+4,Validity,Green);
err = GetLastError()。
if (err>1) { Print("Error modifying Sell order [" + setup + "]:(" + err + ") " + ErrorDescription(err)); }.
}
}
int func_Symbol2Val(stringシンボル){ { (シンボル)
if(symbol=="AUDUSD"){return(01)。
} else if(symbol=="CHFJPY") { return(10);
} else if(symbol=="EURAUD") { return(10);
} else if(symbol=="EURCAD"){リターン(11);
} else if(symbol=="EURCHF"){リターン(12);
} else if(symbol=="EURGBP"){リターン(13);
} else if(symbol=="EURJPY"){リターン(14);
} else if(symbol=="EURUSDm"){リターン(15);
} else if(symbol=="GBPCHF"){リターン(20);
} else if(symbol=="GBPJPY"){リターン(21);
} else if(symbol=="GBPUSD"){リターン(22);
} else if(symbol=="USDCAD"){リターン(40);
} else if(symbol=="USDCHF"){リターン(41);
} else if(symbol=="USDJPY"){リターン(42);
} else if(symbol=="GOLD"){リターン(90);
} else { Comment("予期せぬシンボル"); return(0);
}
}
int OrderSendExtended(string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment, int magic, datetime expiration=0, color arrow_color=CLR_NONE) { (シンボル, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, 文字列コメント)
datetime OldCurTime;
int timeout=30;
int ticket;
OldCurTime=CurTime()。
while (GlobalVariableCheck("InTrade") && !IsTradeAllowed()) { {.
if(OldCurTime+timeout<=CurTime()) { { (OldCurTime+timeout<=CurTime())です。
Print("OrderSendExtended()でエラーが発生しました。タイムアウトが発生しました");
return(0);
}
Sleep(1000);
}
GlobalVariableSet("InTrade", CurTime()); // ロックインジケータの設定
ticket = OrderSend(symbol, cmd, volume, price, slippage, stoploss, takeprofit, comment, magic, expiration, arrow_color);
GlobalVariableDel("InTrade"); // ロックインジケータの解除
return(ticket)。
}InitialStopLossを10倍にして、ライブ口座で試してみてください。そのEAは4桁のブローカー用に書かれています。
______________________
追記:TakeProfitも10倍すると一貫してpipsになりますが、この数値でテストすると、バックテスト時と同じ結果にはなりません(単にバックテストでは、デモ口座でも ライブ口座でも許されない値をこの2つに使うことができたからです)。
zigflip 最後の2つのpsarは、"psarの最後の上/下ペア "または "最後の2つのバー "のように?
メールマガジンを購読していたはずなのに、返信が遅くなり申し訳ありません。
最後のpsarのペアのことです。
私は主に最後のpsarを監視したいのですが、上限/下限の変更が発生したときに最後の2つのレベルが必要になり、うーん、多分Xバーバックでなければなりません...ああ、私は今あなたが言っていることを参照してください、第二の思考でおそらく上限/下限の最後のセット、それは最初の新しい方向のpsarの到着時に最後の変更にトリミング
この上のあなたの助けをいただきありがとうございます。