コーディングの方法は? - ページ 298 1...291292293294295296297298299300301302303304305...347 新しいコメント tkuan77 2012.06.17 09:10 #2971 mladen: テランスTSD :Lessons のこのセクションはご覧になりましたか? 多くの質問がすでにそこで回答されていますし、一般的なEAの書き方に関する非常に良い例も見つかると思います。あなたの質問についてですが、私はあなたのEAをテストしていませんので、わかりません。他人のEAをテストする際の問題点は、そのEAのアイデアやロジックを知らなければならず、多くの場合、コード自体からそれらを「読み取る」ことは不可能であることです。私たちが話していたコードの断片は、閉じたバー上の2つの平均のクロスを検出する方法に関するもので、そのコードはまさにそれだけをやっているのです。それが、私が「SLやTPとは関係ない」と言った理由です。 よろしくお願いします。 ムラデン Mladenさん、またまたお邪魔します。私のコードを見てみると、TPやSLだけでなく、時には売買注文さえもずれていることに気づきました。このような場合、「left.left.left.left.left.left.left.left.left.left.left.left.left.left.私は真剣にコードで私のエラーの原因を見つけるように見えることはできません。 MAのクロスはLongとShortの注文と一緒にあるべきように動作しますが、私がそれをテストするために基本的なASK関数をしたときでさえ、時々エントリとエグジットがおかしくなっているようです。どうかご教授ください。 ありがとうございました。 テランス Mladen Rakic 2012.06.17 09:38 #2972 ... テランス 最初に:あなたのブローカーはECN/STPのようなものですか?もしそうなら、ストップロスやテイクプロフィットを 注文の開始と同時に設定することはできず、まずそれらを0に設定した注文を開き、OrderModify()ですでに開いた注文にストップロスやテイクプロフィットを設定しなければなりません。 第二に、ターミナルウィンドウのエキスパートタブに何か書き込まれているかどうかを常にチェックすること。 第三に、このような行を置くとよいでしょう。 int err=GetLastError(); Print(err); 各オーダー管理機能の後に。experts/include/stderror.mqhファイルにあるエラーの説明(注文で起こりうる多くのエラー(起こりうるエラーコードと説明のリストを見てください)があり、あなたは可能な限りのエラーを監視しなければなりません)既知のエラーコード(上記からのコードの行)で、何が起こっているかを推測するより、特定のエラー修正に専念することができます。 tkuan77: こんにちは、Mladen。私のコードを見てみると、TPとSLだけでなく、時々買い注文と売り注文さえもずれていることに気づきました。私は、codersgurusから教えてもらったレッスンのリンクを調べ、私が持っていて私のコードを基にしたチュートリアルのセットと同じでした。私は真剣にコードで私のエラーの原因を見つけることができないようです。 MAのクロスはLongとShortの注文と同様に機能しますが、基本的なASK関数でテストしてもEntryとExitがおかしくなることがあります。どうかご教授ください。ありがとうございます。 テランス ファイル: terminal_1.gif 62 kb tkuan77 2012.06.17 15:06 #2973 mladen: テランス最初に:あなたのブローカーは、ECN/STPのようなものですか?もしそうなら、ストップロスやテイクプロフィットを注文と一緒に出すことはできません。まず、それらを0に設定して注文を出し、OrderModify()を使って、すでに出した注文にストップロスやテイクプロフィットを設定しなければなりません。 第二に、ターミナルウィンドウのエキスパートタブに何か書き込まれているかどうかを常にチェックすること。 第三に : このような行を置くのは良いアイデアかもしれません。 int err=GetLastError(); Print(err); 各Order管理関数の後。experts/include/stderror.mqhファイルにあるエラーの説明(オーダーで起こりうるエラーはたくさんあり(考えられるエラーコードと説明のリストをご覧ください)、考えられるエラーを一つ一つ監視しなければなりません)既知のエラーコード(上記のコードの行)があれば、何が起こっているかを推測する代わりに、特定のエラーの修正に集中できます。 Mladenさん、こんにちは。 ECN/STPの件、ご指摘ありがとうございます。あなたが言うまで、私はそれらについて知りませんでした。ご指摘の通り変更したのですが、私にとっては最悪の事態になってしまいました。エントリーとエグジットの問題が続くだけでなく、私のSLが行方不明になっています。これは私が考えていたより難しいことです。 //--- 入力パラメータ extern double TakeProfit=1000.0; extern double Lots=0.1; extern double StopLoss=1500.0; //+------------------------------------------------------------------+ //| エキスパート初期化関数 //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| エキスパート初期化関数 //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } int mainCrossed (double mainline1 , double mainline2) { static int mainlast_direction = 0; static int maincurrent_dirction = 0; if(mainline1>mainline2)maincurrent_dirction = 1; //メインを上げる if(mainline1<mainline2)メインカレントディレクション = 2; //メインダウン if(maincurrent_dirction != mainlast_direction) //メイン変更 { mainlast_direction = maincurrent_dirction; return (mainlast_direction); } さもなくば { return (0); } } //+------------------------------------------------------------------+ //| エキスパートスタート機能 //+------------------------------------------------------------------+ int start() { //---- int cnt, ticket, total; double shortEma, longEma, mainshortEma, mainlongEma; if(Bars<100) { Print("bars less than 100"); return(0); } if(テイクプロフィット<10) { Print("TakeProfitが10未満"); return(0); // TakeProfitのチェック int isCrossed = 0; double shortEma1 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,1); double longEma1 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,1); double longEma1 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,1); double shortEma2 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,2); double longEma2 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,2); double longEma2 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,2); double longEma2 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,2); double diff1 = shortEma1-longEma1; double diff2 = shortEma2-longEma2; double diff1 = shortEma1-longEma1; double diff2 = shortEma2-longEma2; mainshortEma = iMA(NULL,0,30,0,MODE_SMA,PRICE_CLOSE,0); mainlongEma = iMA(NULL,0,50,0,MODE_SMA,PRICE_CLOSE,0); int mainisCrossed = mainCrossed (mainshortEma,mainlongEma); if ((diff1*diff2)<0)) { if (shortEma1>longEma1) isCrossed = 1; else isCrossed = 2; total = OrdersTotal(); if(total < 1) { if(isCrossed == 1 && mainshortEma > mainlongEma) { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*ポイント, "私のEA",12345,0,緑); if(ticket>0) { if(オーダーセレクト(チケット,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice()); else Print("BUY注文の開始エラー :",GetLastError())。 return(0); } if(isCrossed == 2 && mainshortEma < mainlongEma) { ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*ポイント, "私のEA",12345,0,赤); if(ticket>0) { if(オーダーセレクト(チケット,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice()); else Print("SELL注文の開始エラー :",GetLastError()); return(0); return(0)。 } for(cnt=0;cnt<total;cnt++) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())) { if(OrderType()==OP_BUY)// ロングポジションがオープン { OrderClose(OrderTicket(),OrderLots(),Ask-StopLoss*Point,3,Violet).のようになります。 // ポジションを閉じる return(0); // 終了 } else // ショートポジションに移動 { オーダークローズ(OrderTicket(),OrderLots(),Bid+StopLoss*Point,3,Violet); // ポジションを閉じる return(0); // 終了 } } } return(0); //+------------------------------------------------------------------+ How to code? 生のアイデア Please help me with tkuan77 2012.06.18 11:54 #2974 mladen: Terrance最初に:あなたのブローカーは、ECN/STPのようなものですか?もしそうなら、ストップロスやテイクプロフィットを注文と一緒に出すことはできません。まず、それらを0に設定して注文を出し、OrderModify()を使って、すでに出した注文にストップロスやテイクプロフィットを設定しなければなりません。 第二に、ターミナルウィンドウのエキスパートタブに何か書き込まれているかどうかを常にチェックすること。 3つ目 : このような行を置くのも良いアイデアかもしれません。 int err=GetLastError(); Print(err); 各順序の管理機能の後。experts/include/stderror.mqhファイルにあるエラーの説明(オーダーで起こりうるエラーはたくさんあり(考えられるエラーコードと説明のリストをご覧ください)、考えられるエラーを一つ一つ監視しなければなりません)既知のエラーコード(上記のコードの行)があれば、何が起こっているかを推測する代わりに、特定のエラーを修正することに集中できます。 Mladen、ここ数日のあなたの協力に感謝します。私のコードで、入出力のエラーの 原因となっているエラーを見つけることができました。 ありがとうございました。 Terrance tkuan77 2012.07.03 05:22 #2975 1つ以上のトレードを開く こんにちは、私は私のEAが複数の取引を開くことができるようにしようとしてきたが、今のところ私はそれが1つの取引に限定することができます。 私の目的は単純です。 LWMA 10がLWMA 20を下回る場合、システムはLWMA 10と20の両方がSMA 50を下回る場合にショートし、ロングトレードの場合はその逆となります。 私はEAが2つ以上の取引を行わないように制限したいのですが、コードを変更すると、1つの基準で1つの取引を行う代わりに、一度に2つの取引を行うようになります。 カウンターシステムか何かを設定する必要があるのでしょうか、それとも私の取引の1つがすでにTPかSLになったときに反応するようにカウンターを設定するにはどうしたらいいのでしょうか? どなたか、私のコードに何か問題があるのか、教えていただけませんか? ありがとうございました。 テランス //--- 入力パラメータ extern double TakeProfit=500.0; extern double Lots=0.1; extern double StopLoss=500.0。 //+------------------------------------------------------------------+ //| エキスパート初期化関数 //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| エキスパート初期化関数 //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| エキスパートスタート機能 //+------------------------------------------------------------------+ int start() { //---- int cnt, ticket, total; double shortEma, longEma, mainshortEma, mainlongEma; if(Bars<100) { Print("bars less than 100"); return(0); } if(テイクプロフィット<10) { Print("TakeProfitが10未満"); return(0); // TakeProfitのチェック } shortEma = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,0)。 longEma = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,0); int isCrossed = 0; double shortEma1 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,1)です。 double longEma1 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,1); double longEma1 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,1); double shortEma2 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,2); double longEma2 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,2); double longEma2 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,2); double longEma2 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,2); double diff1 = shortEma1-longEma1; double diff2 = shortEma2-longEma2; double diff1 = shortEma1-longEma1; double diff2 = shortEma2-longEma2; mainshortEma = iMA(NULL,0,50,0,MODE_SMA,PRICE_CLOSE,0); if ((diff1*diff2)<0)) { if (shortEma1>longEma1) isCrossed = 1; else isCrossed = 2; total = OrdersTotal(); if(total < 1) { if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma) { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*ポイント, Ask+TakeProfit*Point, "私のEA",12345,0,緑); if(チケット>0) { if(オーダーセレクト(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice()); else Print("BUY注文の開始エラー :",GetLastError())。 return(0); } if(isCrossed == 2 && shortEma < mainshortEma && longEma < mainshortEma) { ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point, "私のEA",12345,0,赤); if(チケット>0) { if(オーダーセレクト(チケット,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice()); else Print("SELL注文の開始エラー :",GetLastError()); return(0); return(0); if(total == 1) { if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma) { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point,Ask+TakeProfit*Point. "私のEA",12345,0)。 "私のEA",12345,0,緑); if(チケット>0) { if(オーダーセレクト(チケット,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice()); else Print("BUY注文の開始エラー :",GetLastError())。 return(0); } if(isCrossed == 2 && shortEma < mainshortEma && longEma < mainshortEma) { ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point, "私のEA",12345,0,赤); if(チケット>0) { if(オーダーセレクト(チケット,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice()); else Print("SELL注文の開始エラー :",GetLastError()); return(0); return(0); return(0); } //+------------------------------------------------------------------+ How to code? 生のアイデア 絵馬クロス! premalmunshaw 2012.07.03 10:39 #2976 ご質問 ムラデン 教えていただいたリンクからレッスンを探しているのですが、それらは一般的なレッスンであり、私はHendersonのインジケーターに特化した情報を探しているのですが...。 また、投稿されたスレッドに目を通しましたが、その後、以下のことを調べたいと思っています。 -わかりやすい言葉で言うと、「だいたい何本くらいで色が変わるのか」ということです。 言い換えれば、線の色が青からピンクに変わるまで、最大何バーかかるのでしょうか?残念ながら、私は空想の専門用語を理解していないと私は私が移動し、戦略を開始することができ、非常に単純な応答をappriciatedでしょう。premalmunshaw@yahoo.com は私のメールアドレスです。 私はこのパッケージを有効にするために39ドルを支払おうとしています。 前向きな返答を楽しみにしています。 よろしくお願いします。 プレマル・マンショー mladen: 率直に言って、私はあなたが何を求めているのか理解できません。もし、「いつ色が変わるのか」という質問であれば、答えは「傾きが変わるとき」です。 もし、「どのように色が変わるのか」という質問であれば、その答えは、このセクションに書かれています。レッスン 内容 . Mladen Rakic 2012.07.03 11:03 #2977 ... 残念ながら、私はあなたの質問を理解していないので、私は自分自身を再表明します(計算の長さは、ヘンダーソンのフィルタの計算長さを指します)。 もし、計算の長さが5であれば、最後の2本のバーが変わる可能性があります。計算長が7であれば、最後の3本が変化する可能性があります。 計算長が9であれば、最後の4小節が変化する可能性があります。 これより簡単には答えられない。ヘンダーソンのフィルターがどのように計算されるのか、これ以上簡単な説明はありません。もし私がフーリエ変換を「1+1=2」の観点から説明しようとするならば、それは同じことです。あなたが提供されたリンクを調べてみてください。 残りの部分について:あなたはフィルターの背後にある数学へのリンクを得たし、何本のバーが再計算されるかについての情報を得たし、エリートセクションニュースレッドからの例さえ得たのです。そのフィルターを使った戦略について:再計算する指標(SSA、ヘンダーソンフィルター、中心化TMA、フーリエ変換、回帰分析など)は「シグナルモード」ではなく「推定モード」で使うべきだと、何千回もの投稿で言ってきたはずです。もし、Henderson's filterのシグナルが欲しいのであれば、それは完全に間違った方向であり、もし、それがエリートセクションの購読を検討する唯一の理由であれば、購読しない方が良い。 PS:あなたのメールを公開するのは悪い習慣です。そうすれば、あなたのメールボックスに大量のスパムメールが届くだけです。 ______________________________________ あなたのトレーディングシステムの探求が成功することを祈っています。 よろしくお願いします。 ムラデン premalmunshaw: ムラデン教えていただいたリンクからレッスンを探そうとしているのですが、それらは一般的なレッスンであり、私はヘンダーソンのインジケーターに特化した情報を探しているのです...。 また、投稿されたスレッドに目を通しましたが、その後、以下のことを調べたいと思っています。 -わかりやすい言葉で言うと、「だいたい何本くらいで色が変わるのか」ということです。 言い換えれば、線の色が青からピンクに変わるまで、最大何バーかかるのでしょうか?残念ながら、私は空想の専門用語を理解していないと私は私が移動し、戦略を開始することができ、非常に単純な応答をappriciatedでしょう。premalmunshaw@yahoo.com は私のメールアドレスです。 私はこのパッケージを有効にするために39ドルを支払おうとしています。 前向きな返答を楽しみにしています。 よろしくお願いします。 プレマル・マンショー tkuan77 2012.07.03 12:13 #2978 Mladenです。 私のトレードにカウンターを設定し、私のトレードがTPまたはSLになったときにカウンターのジャンプをトリガーできるような方法はありますか? よろしくお願いします。 テランス tkuan77: こんにちは、私は自分のEAを複数の取引を開始できるようにしようとしていますが、今のところ1つの取引に限定することができます。 私の目的は単純です。 LWMA 10がLWMA 20を下回るとき、システムはLWMA 10と20の両方がSMA 50を下回る場合にショートし、ロングトレードの場合はその逆です。 私はEAが2つ以上の取引を行わないように制限したいのですが、コードを変更すると、1つの基準で1つの取引を行うのではなく、一度に2つの取引を行うようになります。 カウンターシステムか何かを設定する必要があるのでしょうか、それとも私の取引の1つがすでにTPかSLになったときに反応するようにカウンターを設定するにはどうしたらいいのでしょうか? どなたか、私のコードに何か問題があるのか、教えていただけませんか? ありがとうございました。 テランス //--- 入力パラメータ extern double TakeProfit=500.0; extern double Lots=0.1; extern double StopLoss=500.0。 //+------------------------------------------------------------------+ //| エキスパート初期化関数 //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| エキスパート初期化関数 //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| エキスパートスタート機能 //+------------------------------------------------------------------+ int start() { //---- int cnt, ticket, total; double shortEma, longEma, mainshortEma, mainlongEma; if(Bars<100) { Print("bars less than 100"); return(0); } if(テイクプロフィット<10) { Print("TakeProfitが10未満"); return(0); // TakeProfitのチェック } shortEma = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,0)。 longEma = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,0); int isCrossed = 0; double shortEma1 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,1)です。 double longEma1 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,1); double longEma1 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,1); double shortEma2 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,2); double longEma2 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,2); double longEma2 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,2); double longEma2 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,2); double diff1 = shortEma1-longEma1; double diff2 = shortEma2-longEma2; double diff1 = shortEma1-longEma1; double diff2 = shortEma2-longEma2; mainshortEma = iMA(NULL,0,50,0,MODE_SMA,PRICE_CLOSE,0); if ((diff1*diff2)<0)) { if (shortEma1>longEma1) isCrossed = 1; else isCrossed = 2; total = OrdersTotal(); if(total < 1) { if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma) { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*ポイント, Ask+TakeProfit*Point, "私のEA",12345,0,緑); if(チケット>0) { if(オーダーセレクト(チケット,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice()); else Print("BUY注文の開始エラー :",GetLastError())。 return(0); } if(isCrossed == 2 && shortEma < mainshortEma && longEma < mainshortEma) { ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point, "私のEA",12345,0,赤); if(チケット>0) { if(オーダーセレクト(チケット,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice()); else Print("SELL注文の開始エラー :",GetLastError()); return(0); return(0); if(total == 1) { if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma) { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point,Ask+TakeProfit*Point. "私のEA",12345,0)。 "私のEA",12345,0,緑); if(チケット>0) { if(オーダーセレクト(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice()); else Print("BUY注文の開始エラー :",GetLastError())。 return(0); } if(isCrossed == 2 && shortEma < mainshortEma && longEma < mainshortEma) { ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point, "私のEA",12345,0,赤); if(チケット>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice()); else Print("SELL注文の開始エラー :",GetLastError()); return(0); return(0); return(0); } //+------------------------------------------------------------------+ Mladen Rakic 2012.07.04 11:30 #2979 ... この機能を試してみて ください。 int countOpenedOrders(int type) { int openedOrders = 0; for(int i=0; i < OrdersTotal(); i++) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) break; if(OrderSymbol() != Symbol()) continue; if(OrderMagicNumber() != MagicNumber) continue; if(OrderType() == type) openedOrders++; } return(openedOrders); } [/PHP] To count opened buy orders, call it like this : int openedBuys = countOpened(OP_BUY); to count opened sell orders, call it like this : [PHP]int openedSells = countOpened(OP_SELL); そして、次のように確認します。if openedBuys==0 open buyif openedSells==0 open selltkuan77: ムラデン私の取引にカウンターを設定し、私の取引にTPまたはSLがあるとき、カウンターのジャンプをトリガーできるような方法はありますか? ご希望 テランス コーディングのヘルプ EAが複数のペアで実行されない、助けが必要 エラーに悩まされ、取引業務がない tkuan77 2012.07.05 14:07 #2980 Mladenさん、こんにちは。 Bars関数を使った別の方法を思いつきました。トレードがトリガーされたとき、私はbars関数で 整数のカウントを設定し(例えば、買いトレードはbars 122でトリガーされ、したがってカウントは122になります)、私の基準が再びトリガーされたとき、私は再びbar関数を呼び、カウントとそれを比較し、新しいカウントが前のカウント(この場合122)より高い場合にのみトレードをトリガーします。 しかし、私はまだ基準ごとに1ではなく、一緒に2つの取引をトリガしています。これはなぜでしょうか? 助けてください。 よろしくお願いします。 テランス //--- 入力パラメータ extern double TakeProfit=530.0; extern double Lots=0.1; extern double StopLoss=520.0; //+------------------------------------------------------------------+ //| エキスパート初期化関数 //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| エキスパート初期化関数 //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| エキスパートスタート機能 //+------------------------------------------------------------------+ int start() { //---- int cnt, ticket, total; double shortEma, longEma, mainshortEma, mainlongEma; if(Bars<100) { Print("bars less than 100"); return(0); } if(テイクプロフィット<10) { Print("TakeProfitが10未満"); return(0); // TakeProfitのチェック } shortEma = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,0)。 longEma = iMA(NULL,0,25,0,MODE_LWMA,PRICE_CLOSE,0); int isCrossed = 0; double shortEma1 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,1)です。 double longEma1 = iMA(NULL,0,25,0,MODE_LWMA,PRICE_CLOSE,1); double longEma1 = iMA(NULL,0,25,0,MODE_LWMA,PRICE_CLOSE,1); double shortEma2 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,2); double longEma2 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,2); double longEma2 = iMA(NULL,0,25,0,MODE_LWMA,PRICE_CLOSE,2); double longEma2 = iMA(NULL,0,25,0,MODE_LWMA,PRICE_CLOSE,3); double diff1 = shortEma1-longEma1; double diff2 = shortEma2-longEma2; double diff1 = shortEma1-longEma1; double diff2 = shortEma2-longEma2; mainshortEma = iMA(NULL,0,113,0,MODE_EMA,PRICE_CLOSE,0); if ((diff1*diff2)<0)) { if (shortEma1>longEma1) isCrossed = 1; else isCrossed = 2; } int BarCounter, BarCounter2; total = OrdersTotal(); if(total < 1) { if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma) { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*ポイント, Ask+TakeProfit*Point, "私のEA",12345,0,緑); if(チケット>0) { if(オーダーセレクト(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice()); BarCounter = Bars; } else Print("Error opening BUY order :",GetLastError()); return(0); } if(isCrossed == 2 && shortEma < mainshortEma && longEma < mainshortEma) { ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point, "私のEA",12345,0,赤); if(チケット>0) { if(オーダーセレクト(チケット,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice()); BarCounter = Bars; else Print("Error opening SELL order :",GetLastError()); return(0); } return(0); if(total == 1) { BarCounter2 = Bars; if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma && BarCounter2 > BarCounter) { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point,Ask+TakeProfit*Point, "私のEA",12345,0,緑); if(チケット>0) { if(オーダーセレクト(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice()); BarCounter = BarCounter2; } else Print("Error opening BUY order :",GetLastError()); return(0); } if(isCrossed == 2 && shortEma < mainshortEma && longEma BarCounter) { ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point.My EA),12345.Bid-TakeProfit*Point.Bid-TopLoss*ポイント, "私のEA",12345,0,赤); if(チケット>0) { if(オーダーセレクト(チケット,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice()); BarCounter = BarCounter2; } else Print("Error opening SELL order :",GetLastError()); return(0); } return(0); return(0); } mladen: この関数を試してみてください。int countOpenedOrders(int type) { int openedOrders = 0; for(int i=0; i < OrdersTotal(); i++) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) break; if(OrderSymbol() != Symbol()) continue; if(OrderMagicNumber() != MagicNumber) continue; if(OrderType() == type) openedOrders++; } return(openedOrders); } [/PHP] To count opened buy orders, call it like this : int openedBuys = countOpened(OP_BUY); to count opened sell orders, call it like this : [PHP]int openedSells = countOpened(OP_SELL); もし、openBuys==0なら買いを、openSells==0なら売りをオープンして ください。 How to code? 生のアイデア Help with Entry Criteria 1...291292293294295296297298299300301302303304305...347 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
テランス
TSD :Lessons のこのセクションはご覧になりましたか?
多くの質問がすでにそこで回答されていますし、一般的なEAの書き方に関する非常に良い例も見つかると思います。あなたの質問についてですが、私はあなたのEAをテストしていませんので、わかりません。他人のEAをテストする際の問題点は、そのEAのアイデアやロジックを知らなければならず、多くの場合、コード自体からそれらを「読み取る」ことは不可能であることです。私たちが話していたコードの断片は、閉じたバー上の2つの平均のクロスを検出する方法に関するもので、そのコードはまさにそれだけをやっているのです。それが、私が「SLやTPとは関係ない」と言った理由です。
よろしくお願いします。
ムラデンMladenさん、またまたお邪魔します。私のコードを見てみると、TPやSLだけでなく、時には売買注文さえもずれていることに気づきました。このような場合、「left.left.left.left.left.left.left.left.left.left.left.left.left.left.私は真剣にコードで私のエラーの原因を見つけるように見えることはできません。
MAのクロスはLongとShortの注文と一緒にあるべきように動作しますが、私がそれをテストするために基本的なASK関数をしたときでさえ、時々エントリとエグジットがおかしくなっているようです。どうかご教授ください。
ありがとうございました。
テランス
...
テランス
最初に:あなたのブローカーはECN/STPのようなものですか?もしそうなら、ストップロスやテイクプロフィットを 注文の開始と同時に設定することはできず、まずそれらを0に設定した注文を開き、OrderModify()ですでに開いた注文にストップロスやテイクプロフィットを設定しなければなりません。
第二に、ターミナルウィンドウのエキスパートタブに何か書き込まれているかどうかを常にチェックすること。
第三に、このような行を置くとよいでしょう。
各オーダー管理機能の後に。experts/include/stderror.mqhファイルにあるエラーの説明(注文で起こりうる多くのエラー(起こりうるエラーコードと説明のリストを見てください)があり、あなたは可能な限りのエラーを監視しなければなりません)既知のエラーコード(上記からのコードの行)で、何が起こっているかを推測するより、特定のエラー修正に専念することができます。
こんにちは、Mladen。私のコードを見てみると、TPとSLだけでなく、時々買い注文と売り注文さえもずれていることに気づきました。私は、codersgurusから教えてもらったレッスンのリンクを調べ、私が持っていて私のコードを基にしたチュートリアルのセットと同じでした。私は真剣にコードで私のエラーの原因を見つけることができないようです。
MAのクロスはLongとShortの注文と同様に機能しますが、基本的なASK関数でテストしてもEntryとExitがおかしくなることがあります。どうかご教授ください。
ありがとうございます。
テランステランス
最初に:あなたのブローカーは、ECN/STPのようなものですか?もしそうなら、ストップロスやテイクプロフィットを注文と一緒に出すことはできません。まず、それらを0に設定して注文を出し、OrderModify()を使って、すでに出した注文にストップロスやテイクプロフィットを設定しなければなりません。
第二に、ターミナルウィンドウのエキスパートタブに何か書き込まれているかどうかを常にチェックすること。
第三に : このような行を置くのは良いアイデアかもしれません。
Mladenさん、こんにちは。
ECN/STPの件、ご指摘ありがとうございます。あなたが言うまで、私はそれらについて知りませんでした。ご指摘の通り変更したのですが、私にとっては最悪の事態になってしまいました。エントリーとエグジットの問題が続くだけでなく、私のSLが行方不明になっています。これは私が考えていたより難しいことです。
//--- 入力パラメータ
extern double TakeProfit=1000.0;
extern double Lots=0.1;
extern double StopLoss=1500.0;
//+------------------------------------------------------------------+
//| エキスパート初期化関数
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| エキスパート初期化関数
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
int mainCrossed (double mainline1 , double mainline2)
{
static int mainlast_direction = 0;
static int maincurrent_dirction = 0;
if(mainline1>mainline2)maincurrent_dirction = 1; //メインを上げる
if(mainline1<mainline2)メインカレントディレクション = 2; //メインダウン
if(maincurrent_dirction != mainlast_direction) //メイン変更
{
mainlast_direction = maincurrent_dirction;
return (mainlast_direction);
}
さもなくば
{
return (0);
}
}
//+------------------------------------------------------------------+
//| エキスパートスタート機能
//+------------------------------------------------------------------+
int start()
{
//----
int cnt, ticket, total;
double shortEma, longEma, mainshortEma, mainlongEma;
if(Bars<100)
{
Print("bars less than 100");
return(0);
}
if(テイクプロフィット<10)
{
Print("TakeProfitが10未満");
return(0); // TakeProfitのチェック
int isCrossed = 0;
double shortEma1 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,1);
double longEma1 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,1); double longEma1 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,1);
double shortEma2 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,2); double longEma2 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,2);
double longEma2 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,2); double longEma2 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,2);
double diff1 = shortEma1-longEma1;
double diff2 = shortEma2-longEma2; double diff1 = shortEma1-longEma1; double diff2 = shortEma2-longEma2;
mainshortEma = iMA(NULL,0,30,0,MODE_SMA,PRICE_CLOSE,0);
mainlongEma = iMA(NULL,0,50,0,MODE_SMA,PRICE_CLOSE,0);
int mainisCrossed = mainCrossed (mainshortEma,mainlongEma);
if ((diff1*diff2)<0))
{
if (shortEma1>longEma1)
isCrossed = 1;
else isCrossed = 2;
total = OrdersTotal();
if(total < 1)
{
if(isCrossed == 1 && mainshortEma > mainlongEma)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*ポイント,
"私のEA",12345,0,緑);
if(ticket>0)
{
if(オーダーセレクト(チケット,SELECT_BY_TICKET,MODE_TRADES))
Print("BUY order opened : ",OrderOpenPrice());
else Print("BUY注文の開始エラー :",GetLastError())。
return(0);
}
if(isCrossed == 2 && mainshortEma < mainlongEma)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*ポイント,
"私のEA",12345,0,赤);
if(ticket>0)
{
if(オーダーセレクト(チケット,SELECT_BY_TICKET,MODE_TRADES))
Print("SELL order opened : ",OrderOpenPrice());
else Print("SELL注文の開始エラー :",GetLastError());
return(0);
return(0)。
}
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && OrderSymbol()==Symbol()))
{
if(OrderType()==OP_BUY)// ロングポジションがオープン
{
OrderClose(OrderTicket(),OrderLots(),Ask-StopLoss*Point,3,Violet).のようになります。
// ポジションを閉じる
return(0); // 終了
}
else // ショートポジションに移動
{
オーダークローズ(OrderTicket(),OrderLots(),Bid+StopLoss*Point,3,Violet);
// ポジションを閉じる
return(0); // 終了
}
}
}
return(0);
//+------------------------------------------------------------------+
Terrance
最初に:あなたのブローカーは、ECN/STPのようなものですか?もしそうなら、ストップロスやテイクプロフィットを注文と一緒に出すことはできません。まず、それらを0に設定して注文を出し、OrderModify()を使って、すでに出した注文にストップロスやテイクプロフィットを設定しなければなりません。
第二に、ターミナルウィンドウのエキスパートタブに何か書き込まれているかどうかを常にチェックすること。
3つ目 : このような行を置くのも良いアイデアかもしれません。
Mladen、ここ数日のあなたの協力に感謝します。私のコードで、入出力のエラーの 原因となっているエラーを見つけることができました。
ありがとうございました。
Terrance
1つ以上のトレードを開く
こんにちは、私は私のEAが複数の取引を開くことができるようにしようとしてきたが、今のところ私はそれが1つの取引に限定することができます。
私の目的は単純です。
LWMA 10がLWMA 20を下回る場合、システムはLWMA 10と20の両方がSMA 50を下回る場合にショートし、ロングトレードの場合はその逆となります。
私はEAが2つ以上の取引を行わないように制限したいのですが、コードを変更すると、1つの基準で1つの取引を行う代わりに、一度に2つの取引を行うようになります。
カウンターシステムか何かを設定する必要があるのでしょうか、それとも私の取引の1つがすでにTPかSLになったときに反応するようにカウンターを設定するにはどうしたらいいのでしょうか?
どなたか、私のコードに何か問題があるのか、教えていただけませんか?
ありがとうございました。
テランス
//--- 入力パラメータ
extern double TakeProfit=500.0;
extern double Lots=0.1;
extern double StopLoss=500.0。
//+------------------------------------------------------------------+
//| エキスパート初期化関数
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| エキスパート初期化関数
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| エキスパートスタート機能
//+------------------------------------------------------------------+
int start()
{
//----
int cnt, ticket, total;
double shortEma, longEma, mainshortEma, mainlongEma;
if(Bars<100)
{
Print("bars less than 100");
return(0);
}
if(テイクプロフィット<10)
{
Print("TakeProfitが10未満");
return(0); // TakeProfitのチェック
}
shortEma = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,0)。
longEma = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,0);
int isCrossed = 0;
double shortEma1 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,1)です。
double longEma1 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,1); double longEma1 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,1);
double shortEma2 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,2); double longEma2 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,2);
double longEma2 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,2); double longEma2 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,2);
double diff1 = shortEma1-longEma1;
double diff2 = shortEma2-longEma2; double diff1 = shortEma1-longEma1; double diff2 = shortEma2-longEma2;
mainshortEma = iMA(NULL,0,50,0,MODE_SMA,PRICE_CLOSE,0);
if ((diff1*diff2)<0))
{
if (shortEma1>longEma1)
isCrossed = 1;
else isCrossed = 2;
total = OrdersTotal();
if(total < 1)
{
if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*ポイント, Ask+TakeProfit*Point,
"私のEA",12345,0,緑);
if(チケット>0)
{
if(オーダーセレクト(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("BUY order opened : ",OrderOpenPrice());
else Print("BUY注文の開始エラー :",GetLastError())。
return(0);
}
if(isCrossed == 2 && shortEma < mainshortEma && longEma < mainshortEma)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,
"私のEA",12345,0,赤);
if(チケット>0)
{
if(オーダーセレクト(チケット,SELECT_BY_TICKET,MODE_TRADES))
Print("SELL order opened : ",OrderOpenPrice());
else Print("SELL注文の開始エラー :",GetLastError());
return(0);
return(0);
if(total == 1)
{
if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point,Ask+TakeProfit*Point. "私のEA",12345,0)。
"私のEA",12345,0,緑);
if(チケット>0)
{
if(オーダーセレクト(チケット,SELECT_BY_TICKET,MODE_TRADES))
Print("BUY order opened : ",OrderOpenPrice());
else Print("BUY注文の開始エラー :",GetLastError())。
return(0);
}
if(isCrossed == 2 && shortEma < mainshortEma && longEma < mainshortEma)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,
"私のEA",12345,0,赤);
if(チケット>0)
{
if(オーダーセレクト(チケット,SELECT_BY_TICKET,MODE_TRADES))
Print("SELL order opened : ",OrderOpenPrice());
else Print("SELL注文の開始エラー :",GetLastError());
return(0);
return(0);
return(0);
}
//+------------------------------------------------------------------+
ご質問
ムラデン
教えていただいたリンクからレッスンを探しているのですが、それらは一般的なレッスンであり、私はHendersonのインジケーターに特化した情報を探しているのですが...。
また、投稿されたスレッドに目を通しましたが、その後、以下のことを調べたいと思っています。
-わかりやすい言葉で言うと、「だいたい何本くらいで色が変わるのか」ということです。
言い換えれば、線の色が青からピンクに変わるまで、最大何バーかかるのでしょうか?残念ながら、私は空想の専門用語を理解していないと私は私が移動し、戦略を開始することができ、非常に単純な応答をappriciatedでしょう。premalmunshaw@yahoo.com は私のメールアドレスです。
私はこのパッケージを有効にするために39ドルを支払おうとしています。
前向きな返答を楽しみにしています。
よろしくお願いします。
プレマル・マンショー
率直に言って、私はあなたが何を求めているのか理解できません。
もし、「いつ色が変わるのか」という質問であれば、答えは「傾きが変わるとき」です。
もし、「どのように色が変わるのか」という質問であれば、その答えは、このセクションに書かれています。レッスン 内容 ....
残念ながら、私はあなたの質問を理解していないので、私は自分自身を再表明します(計算の長さは、ヘンダーソンのフィルタの計算長さを指します)。
これより簡単には答えられない。ヘンダーソンのフィルターがどのように計算されるのか、これ以上簡単な説明はありません。もし私がフーリエ変換を「1+1=2」の観点から説明しようとするならば、それは同じことです。あなたが提供されたリンクを調べてみてください。
残りの部分について:あなたはフィルターの背後にある数学へのリンクを得たし、何本のバーが再計算されるかについての情報を得たし、エリートセクションニュースレッドからの例さえ得たのです。そのフィルターを使った戦略について:再計算する指標(SSA、ヘンダーソンフィルター、中心化TMA、フーリエ変換、回帰分析など)は「シグナルモード」ではなく「推定モード」で使うべきだと、何千回もの投稿で言ってきたはずです。もし、Henderson's filterのシグナルが欲しいのであれば、それは完全に間違った方向であり、もし、それがエリートセクションの購読を検討する唯一の理由であれば、購読しない方が良い。
PS:あなたのメールを公開するのは悪い習慣です。そうすれば、あなたのメールボックスに大量のスパムメールが届くだけです。
______________________________________
あなたのトレーディングシステムの探求が成功することを祈っています。
よろしくお願いします。
ムラデン
ムラデン
教えていただいたリンクからレッスンを探そうとしているのですが、それらは一般的なレッスンであり、私はヘンダーソンのインジケーターに特化した情報を探しているのです...。
また、投稿されたスレッドに目を通しましたが、その後、以下のことを調べたいと思っています。
-わかりやすい言葉で言うと、「だいたい何本くらいで色が変わるのか」ということです。
言い換えれば、線の色が青からピンクに変わるまで、最大何バーかかるのでしょうか?残念ながら、私は空想の専門用語を理解していないと私は私が移動し、戦略を開始することができ、非常に単純な応答をappriciatedでしょう。premalmunshaw@yahoo.com は私のメールアドレスです。
私はこのパッケージを有効にするために39ドルを支払おうとしています。
前向きな返答を楽しみにしています。
よろしくお願いします。
プレマル・マンショーMladenです。
私のトレードにカウンターを設定し、私のトレードがTPまたはSLになったときにカウンターのジャンプをトリガーできるような方法はありますか?
よろしくお願いします。
テランス
こんにちは、私は自分のEAを複数の取引を開始できるようにしようとしていますが、今のところ1つの取引に限定することができます。
私の目的は単純です。
LWMA 10がLWMA 20を下回るとき、システムはLWMA 10と20の両方がSMA 50を下回る場合にショートし、ロングトレードの場合はその逆です。
私はEAが2つ以上の取引を行わないように制限したいのですが、コードを変更すると、1つの基準で1つの取引を行うのではなく、一度に2つの取引を行うようになります。
カウンターシステムか何かを設定する必要があるのでしょうか、それとも私の取引の1つがすでにTPかSLになったときに反応するようにカウンターを設定するにはどうしたらいいのでしょうか?
どなたか、私のコードに何か問題があるのか、教えていただけませんか?
ありがとうございました。
テランス
//--- 入力パラメータ
extern double TakeProfit=500.0;
extern double Lots=0.1;
extern double StopLoss=500.0。
//+------------------------------------------------------------------+
//| エキスパート初期化関数
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| エキスパート初期化関数
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| エキスパートスタート機能
//+------------------------------------------------------------------+
int start()
{
//----
int cnt, ticket, total;
double shortEma, longEma, mainshortEma, mainlongEma;
if(Bars<100)
{
Print("bars less than 100");
return(0);
}
if(テイクプロフィット<10)
{
Print("TakeProfitが10未満");
return(0); // TakeProfitのチェック
}
shortEma = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,0)。
longEma = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,0);
int isCrossed = 0;
double shortEma1 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,1)です。
double longEma1 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,1); double longEma1 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,1);
double shortEma2 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,2); double longEma2 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,2);
double longEma2 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,2); double longEma2 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,2);
double diff1 = shortEma1-longEma1;
double diff2 = shortEma2-longEma2; double diff1 = shortEma1-longEma1; double diff2 = shortEma2-longEma2;
mainshortEma = iMA(NULL,0,50,0,MODE_SMA,PRICE_CLOSE,0);
if ((diff1*diff2)<0))
{
if (shortEma1>longEma1)
isCrossed = 1;
else isCrossed = 2;
total = OrdersTotal();
if(total < 1)
{
if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*ポイント, Ask+TakeProfit*Point,
"私のEA",12345,0,緑);
if(チケット>0)
{
if(オーダーセレクト(チケット,SELECT_BY_TICKET,MODE_TRADES))
Print("BUY order opened : ",OrderOpenPrice());
else Print("BUY注文の開始エラー :",GetLastError())。
return(0);
}
if(isCrossed == 2 && shortEma < mainshortEma && longEma < mainshortEma)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,
"私のEA",12345,0,赤);
if(チケット>0)
{
if(オーダーセレクト(チケット,SELECT_BY_TICKET,MODE_TRADES))
Print("SELL order opened : ",OrderOpenPrice());
else Print("SELL注文の開始エラー :",GetLastError());
return(0);
return(0);
if(total == 1)
{
if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point,Ask+TakeProfit*Point. "私のEA",12345,0)。
"私のEA",12345,0,緑);
if(チケット>0)
{
if(オーダーセレクト(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("BUY order opened : ",OrderOpenPrice());
else Print("BUY注文の開始エラー :",GetLastError())。
return(0);
}
if(isCrossed == 2 && shortEma < mainshortEma && longEma < mainshortEma)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,
"私のEA",12345,0,赤);
if(チケット>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("SELL order opened : ",OrderOpenPrice());
else Print("SELL注文の開始エラー :",GetLastError());
return(0);
return(0);
return(0);
}
//+------------------------------------------------------------------+...
この機能を試してみて ください。
{
int openedOrders = 0;
for(int i=0; i < OrdersTotal(); i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) break;
if(OrderSymbol() != Symbol()) continue;
if(OrderMagicNumber() != MagicNumber) continue;
if(OrderType() == type) openedOrders++;
}
return(openedOrders);
}
[/PHP]
To count opened buy orders, call it like this :
to count opened sell orders, call it like this :
[PHP]int openedSells = countOpened(OP_SELL);ムラデン
私の取引にカウンターを設定し、私の取引にTPまたはSLがあるとき、カウンターのジャンプをトリガーできるような方法はありますか?
ご希望
テランスMladenさん、こんにちは。
Bars関数を使った別の方法を思いつきました。トレードがトリガーされたとき、私はbars関数で 整数のカウントを設定し(例えば、買いトレードはbars 122でトリガーされ、したがってカウントは122になります)、私の基準が再びトリガーされたとき、私は再びbar関数を呼び、カウントとそれを比較し、新しいカウントが前のカウント(この場合122)より高い場合にのみトレードをトリガーします。
しかし、私はまだ基準ごとに1ではなく、一緒に2つの取引をトリガしています。これはなぜでしょうか?
助けてください。
よろしくお願いします。
テランス
//--- 入力パラメータ
extern double TakeProfit=530.0;
extern double Lots=0.1;
extern double StopLoss=520.0;
//+------------------------------------------------------------------+
//| エキスパート初期化関数
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| エキスパート初期化関数
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| エキスパートスタート機能
//+------------------------------------------------------------------+
int start()
{
//----
int cnt, ticket, total;
double shortEma, longEma, mainshortEma, mainlongEma;
if(Bars<100)
{
Print("bars less than 100");
return(0);
}
if(テイクプロフィット<10)
{
Print("TakeProfitが10未満");
return(0); // TakeProfitのチェック
}
shortEma = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,0)。
longEma = iMA(NULL,0,25,0,MODE_LWMA,PRICE_CLOSE,0);
int isCrossed = 0;
double shortEma1 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,1)です。
double longEma1 = iMA(NULL,0,25,0,MODE_LWMA,PRICE_CLOSE,1); double longEma1 = iMA(NULL,0,25,0,MODE_LWMA,PRICE_CLOSE,1);
double shortEma2 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,2); double longEma2 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,2);
double longEma2 = iMA(NULL,0,25,0,MODE_LWMA,PRICE_CLOSE,2); double longEma2 = iMA(NULL,0,25,0,MODE_LWMA,PRICE_CLOSE,3);
double diff1 = shortEma1-longEma1;
double diff2 = shortEma2-longEma2; double diff1 = shortEma1-longEma1; double diff2 = shortEma2-longEma2;
mainshortEma = iMA(NULL,0,113,0,MODE_EMA,PRICE_CLOSE,0);
if ((diff1*diff2)<0))
{
if (shortEma1>longEma1)
isCrossed = 1;
else isCrossed = 2;
}
int BarCounter, BarCounter2;
total = OrdersTotal();
if(total < 1)
{
if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*ポイント, Ask+TakeProfit*Point,
"私のEA",12345,0,緑);
if(チケット>0)
{
if(オーダーセレクト(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("BUY order opened : ",OrderOpenPrice());
BarCounter = Bars;
}
else Print("Error opening BUY order :",GetLastError());
return(0);
}
if(isCrossed == 2 && shortEma < mainshortEma && longEma < mainshortEma)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,
"私のEA",12345,0,赤);
if(チケット>0)
{
if(オーダーセレクト(チケット,SELECT_BY_TICKET,MODE_TRADES))
Print("SELL order opened : ",OrderOpenPrice());
BarCounter = Bars;
else Print("Error opening SELL order :",GetLastError());
return(0);
}
return(0);
if(total == 1)
{
BarCounter2 = Bars;
if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma && BarCounter2 > BarCounter)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point,Ask+TakeProfit*Point,
"私のEA",12345,0,緑);
if(チケット>0)
{
if(オーダーセレクト(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("BUY order opened : ",OrderOpenPrice());
BarCounter = BarCounter2;
}
else Print("Error opening BUY order :",GetLastError());
return(0);
}
if(isCrossed == 2 && shortEma < mainshortEma && longEma BarCounter)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point.My EA),12345.Bid-TakeProfit*Point.Bid-TopLoss*ポイント,
"私のEA",12345,0,赤);
if(チケット>0)
{
if(オーダーセレクト(チケット,SELECT_BY_TICKET,MODE_TRADES))
Print("SELL order opened : ",OrderOpenPrice());
BarCounter = BarCounter2;
}
else Print("Error opening SELL order :",GetLastError());
return(0);
}
return(0);
return(0);
}
この関数を試してみてください。
{
int openedOrders = 0;
for(int i=0; i < OrdersTotal(); i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) break;
if(OrderSymbol() != Symbol()) continue;
if(OrderMagicNumber() != MagicNumber) continue;
if(OrderType() == type) openedOrders++;
}
return(openedOrders);
}
[/PHP]
To count opened buy orders, call it like this :
to count opened sell orders, call it like this :
[PHP]int openedSells = countOpened(OP_SELL);