コーディングの方法は? - ページ 327 1...320321322323324325326327328329330331332333334...347 新しいコメント tkuan77 2013.06.05 11:24 #3261 こんにちは、私はStocasticのEAでこのようなエラーが発生しました。 私の基準はこのようなものです。 私のstocEquatorが上にクロスするとき(Uptrend)、私のstocTriggerが上にクロスするとロングだけがトリガーされ、stocEquatorが下にクロスするとき(Downtrend)、stocTriggerが下にクロスするとショートだけが トリガーされます。 しかし、テストのためにEAを実行すると、取引がトリガーされないので、何が問題なのかと思い、どなたかここで助けていただけると幸いです。 よろしくお願いします。 よろしくお願いします。 テランス int isCrossedTrigger= 0; double shortStoc1Trigger= iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1); double longStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1); double shortStoc2Trigger= iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2); double longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2); double longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2) double diff1Trigger= shortStoc1Trigger-longStoc1Trigger; double diff2Trigger= shortStoc2Trigger-longStoc2Trigger; double diff2Trigger= shortStoc2Trigger-longStoc2Trigger; if ((diff1Trigger*diff2Trigger)<0)) { if (shortStoc1Trigger>longStoc1Trigger) isCrossedTrigger= 1; else isCrossedTrigger= 2; int isCrossedEquator = 0; double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,1).double longStoc1Equator = iStochastic(NULL); double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1)。 double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,2)。 double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2)。 double diff1Equator = shortStoc1Equator-longStoc1Equator.Double diff2Equator = shortStoc1Equator-longStoc1Equator; double diff2Equator = shortStoc2Equator-longStoc2Equator; double diff2Equator = shortStoc2Equator-longStoc2Equator; if ((diff1Equator*diff2Equator)<0)) { if (shortStoc1Equator>longStoc1Equator) isCrossedEquator = 1; else isCrossedEquator = 2; } if(total < 2) { if(isCrossedTrigger== 1 && isCrossedEquator == 1) { 買う } if(isCrossedTrigger== 2 && isCrossedEquator == 2) { 売り return(0); } return(0); [警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 [ARCHIVE]フォーラムを乱立させないために、どんなルーキーの質問でも。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 5. コーディングのヘルプ Mladen Rakic 2013.06.05 19:26 #3262 tkuan77: こんにちは、私はストキャスティックのEAでこのようなエラーが発生しました。 私の基準はこんな感じです。私のstocEquatorが上にクロスするとき(Uptrend)、私のstocTriggerが上にクロスするときだけロングがトリガーされ、stocEquatorが下にクロスするとき(Downtrend)、stocTriggerが下にクロスするときだけショートがトリガーされるでしょう。しかし、テストのためにEAを実行すると、取引がトリガーされないので、何が問題なのかと思い、どなたかここで助けていただけると幸いです。よろしくお願いします。よろしくお願いします。テランスint isCrossedTrigger= 0;double shortStoc1Trigger= iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);double longStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1);double shortStoc2Trigger= iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);double longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2); double longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2)double diff1Trigger= shortStoc1Trigger-longStoc1Trigger;double diff2Trigger= shortStoc2Trigger-longStoc2Trigger; double diff2Trigger= shortStoc2Trigger-longStoc2Trigger;if ((diff1Trigger*diff2Trigger)<0)){if (shortStoc1Trigger>longStoc1Trigger)isCrossedTrigger= 1;else isCrossedTrigger= 2;int isCrossedEquator = 0;double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,1).double longStoc1Equator = iStochastic(NULL);double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1)。double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,2)。double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2).NULLの場合は、1.5倍。double diff1Equator = shortStoc1Equator-longStoc1Equator.Double diff2Equator = shortStoc1Equator-longStoc1Equator;double diff2Equator = shortStoc2Equator-longStoc2Equator; double diff2Equator = shortStoc2Equator-longStoc2Equator;if ((diff1Equator*diff2Equator)<0)){if (shortStoc1Equator>longStoc1Equator)isCrossedEquator = 1;else isCrossedEquator = 2;}if(total < 2){if(isCrossedTrigger== 1 && isCrossedEquator == 1){買う}if(isCrossedTrigger== 2 && isCrossedEquator == 2){売りreturn(0);} return(0)です。 テランス 私がチェックできなかった唯一のものは、 "合計 "変数です。 total変数が適切に設定されていれば、このコードは動作するはずです。これは、私があなたの条件で使用したテストインジケータ であり、それは有効な売買シグナルを発生させています(ビジュアルモードでインジケータを実行すると、それが警告されたときに表示されます)ので、エラーは他の場所にあるのです。 #property indicator_separate_window #property indicator_buffers 0 //------------------------------------------------------------------ // //------------------------------------------------------------------ int init() { return(0); } //------------------------------------------------------------------ // //------------------------------------------------------------------ int start() { int total = 0; int isCrossedTrigger= 0; double shortStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1); double longStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1) ; double shortStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2); double longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2) ; double diff1Trigger = shortStoc1Trigger-longStoc1Trigger; double diff2Trigger = shortStoc2Trigger-longStoc2Trigger; if ((diff1Trigger*diff2Trigger)<0) { if (shortStoc1Trigger>longStoc1Trigger) isCrossedTrigger= 1; else isCrossedTrigger= 2; } int isCrossedEquator = 0; double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN, 1); double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1); double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN, 2); double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2); double diff1Equator = shortStoc1Equator-longStoc1Equator; double diff2Equator = shortStoc2Equator-longStoc2Equator; if ((diff1Equator*diff2Equator)<0) { if (shortStoc1Equator>longStoc1Equator) isCrossedEquator = 1; else isCrossedEquator = 2; } // // // // // if(total < 2) { if(isCrossedTrigger== 1 && isCrossedEquator == 1) { Alert("Buy at : "+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS)); } if(isCrossedTrigger== 2 && isCrossedEquator == 2) { Alert("Sell at : "+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS)); } } return(0); } コーディングのヘルプ How to code? [アーカイブ!】どんなルーキーの質問でも、フォーラムを散らかさないように。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 2. tkuan77 2013.06.06 15:15 #3263 mladenさん、こんにちは。私のコードを見てみましたが、"total "変数が何を意味しているのか分かりませんでした。私のエラーの原因は何でしょうか? よろしくお願いします。 テランス //+------------------------------------------------------------------+ //| My_First_EA.mq4(英語版) //| TK ||MetaTrader 4 Trading Platform / MetaQuotes Software Corp.| //+------------------------------------------------------------------+ #property copyright "TK" #property link "http://www.metaquotes.net" //--- 入力パラメータ extern double TakeProfit=500.0; extern double Lots=0.1; extern double StopLoss=500.0; //+------------------------------------------------------------------+ //| エキスパート初期化関数 //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| エキスパート初期化関数 //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| エキスパートスタート機能 //+------------------------------------------------------------------+ datetime newbar; int start() { if(newbar==Time[0])return(0)。 else newbar=Time[0]です。 int ticket, total; if(Bars<100) { Print("bars less than 100"); return(0); } if(テイクプロフィット<10) { Print("TakeProfitが10未満"); return(0)。 } //+------------------------------------------------------------------+ //|エキスパートスタート機能|ストキャストトリガー //+------------------------------------------------------------------+ // shortStoc = iStochastic(NULL,0,7,15,17,MODE_LWMA,0,MODE_MAIN,0); /orignialストキャスティックの動き // longStoc = iStochastic(NULL,0,7,15,17,MODE_LWMA,0,MODE_SIGNAL,0); /またはStocを無視した動きです。 //+--------------------------------------------------------------------------------------+ //| エキスパートスタート機能| ラインが交差し、ローソク足が閉じたときのみトリガートレードを設定する|/// //+--------------------------------------------------------------------------------------+ int isCrossed = 0; double shortStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1); double longStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1); double longStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,1); double shortStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2); double longStoc2 = iStochastic(NULL,0,3,5,6,0,MODE_MAIN,2); double longStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2); double longStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1); double diff1 = shortStoc1-longStoc1; double diff2 = shortStoc2-longStoc2; double diff1 = shortStoc1-longStoc1; double diff2 = shortStoc2-longStoc2; if ((diff1*diff2)<0)) { if (shortStoc1>longStoc1) isCrossed = 1; else isCrossed = 2; } // Equator Stoc スタート ---------------------------------------- int isCrossedEquator = 0; double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,1).double longStoc1Equator = iStochastic(NULL); double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1)。 double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,2)。 double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2).NULLの場合は、1.5倍。 double diff1Equator = shortStoc1Equator-longStoc1Equator.Double diff2Equator = shortStoc1Equator-longStoc1Equator; double diff2Equator = shortStoc2Equator-longStoc2Equator; double diff2Equator = shortStoc2Equator-longStoc2Equator; if ((diff1Equator*diff2Equator)<0)) { if (shortStoc1Equator>longStoc1Equator) isCrossedEquator = 1; else isCrossedEquator = 2; } // Equator Stoc End ------------------------------------------------ // Equator Stoc End //+------------------------------------------------------------------------------------+ //| エキスパート終了関数|ラインが交差し、ローソクが閉じた時のみトリガートレードを設定する|/// //+------------------------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| エキスパート終了関数|ストキャストトリガー //+------------------------------------------------------------------+ //| エキスパートスタート機能|トリガーオーダー //+------------------------------------------------------------------------------------------------------------+ total = OrdersTotal(); if(total < 2) //取引開始回数を制限する { if(isCrossed == 1 && isCrossedEquator == 1) { 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()); else Print("BUY注文の開始エラー :",GetLastError())。 return(0); } if(isCrossed == 2 && isCrossedEquator == 2) { 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); } //+------------------------------------------------------------------+ //| エキスパートエンド関数 //+------------------------------------------------------------------+ mladen: テランス唯一ノーチェックだったのは「total」変数です total変数が適切に設定されていれば、このコードは動作するはずです。これは、私があなたの条件で使用したテストインディケータで、有効な売買シグナルを発生させています(インディケータをビジュアルモードで実行すると、警告が出るのがわかります)ので、エラーはどこか他の場所にあります。 #property indicator_separate_window #property indicator_buffers 0 //------------------------------------------------------------------ // //------------------------------------------------------------------ int init() { return(0); } //------------------------------------------------------------------ // //------------------------------------------------------------------ int start() { int total = 0; int isCrossedTrigger= 0; double shortStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1); double longStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1) ; double shortStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2); double longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2) ; double diff1Trigger = shortStoc1Trigger-longStoc1Trigger; double diff2Trigger = shortStoc2Trigger-longStoc2Trigger; if ((diff1Trigger*diff2Trigger)<0) { if (shortStoc1Trigger>longStoc1Trigger) isCrossedTrigger= 1; else isCrossedTrigger= 2; } int isCrossedEquator = 0; double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN, 1); double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1); double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN, 2); double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2); double diff1Equator = shortStoc1Equator-longStoc1Equator; double diff2Equator = shortStoc2Equator-longStoc2Equator; if ((diff1Equator*diff2Equator)<0) { if (shortStoc1Equator>longStoc1Equator) isCrossedEquator = 1; else isCrossedEquator = 2; } // // // // // if(total < 2) { if(isCrossedTrigger== 1 && isCrossedEquator == 1) { Alert("Buy at : "+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS)); } if(isCrossedTrigger== 2 && isCrossedEquator == 2) { Alert("Sell at : "+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS)); } } return(0); } How to code? Help with Entry Criteria 生のアイデア Mladen Rakic 2013.06.06 16:15 #3264 tkuan77: mladenさん、ありがとうございます。私は戻って私のコードを見て、あなたが "合計 "変数によって意味するものを理解することができませんでした。私のエラーの原因は何でしょうか?採用情報 テランス //+------------------------------------------------------------------+ //| My_First_EA.mq4(マイファースト・イーエー) || TK ||MetaTrader 4 Trading Platform / MetaQuotes Software Corp.| //+------------------------------------------------------------------+ #property copyright "TK" #property link "http://www.metaquotes.net" //--- 入力パラメータ extern double TakeProfit=500.0; extern double Lots=0.1; extern double StopLoss=500.0; //+------------------------------------------------------------------+ //| エキスパート初期化関数 //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| エキスパート初期化関数 //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| エキスパートスタート機能 //+------------------------------------------------------------------+ datetime newbar; int start() { if(newbar==Time[0])return(0)。 else newbar=Time[0]です。 int ticket, total; if(Bars<100) { Print("bars less than 100"); return(0); } if(テイクプロフィット<10) { Print("TakeProfitが10未満"); return(0)。 } //+------------------------------------------------------------------+ //|エキスパートスタート機能|ストキャストトリガー //+------------------------------------------------------------------+ // shortStoc = iStochastic(NULL,0,7,15,17,MODE_LWMA,0,MODE_MAIN,0); /有機ストックの動き // longStoc = iStochastic(NULL,0,7,15,17,MODE_LWMA,0,MODE_SIGNAL,0); /またはStocを無視した動きです。 //+--------------------------------------------------------------------------------------+ //| エキスパートスタート機能| ラインが交差し、ローソク足が閉じたときのみトリガートレードを設定する|/// //+--------------------------------------------------------------------------------------+ int isCrossed = 0; double shortStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1); double longStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1); double longStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,1); double shortStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2); double longStoc2 = iStochastic(NULL,0,3,5,6,0,MODE_MAIN,2); double longStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2); double longStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1); double diff1 = shortStoc1-longStoc1; double diff2 = shortStoc2-longStoc2; double diff1 = shortStoc1-longStoc1; double diff2 = shortStoc2-longStoc2; if ((diff1*diff2)<0)) { if (shortStoc1>longStoc1) isCrossed = 1; else isCrossed = 2; } // Equator Stoc スタート ---------------------------------------- int isCrossedEquator = 0; double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,1).double longStoc1Equator = iStochastic(NULL); double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1)。 double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,2)。 double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2)。 double diff1Equator = shortStoc1Equator-longStoc1Equator.Double diff2Equator = shortStoc1Equator-longStoc1Equator; double diff2Equator = shortStoc2Equator-longStoc2Equator; double diff2Equator = shortStoc2Equator-longStoc2Equator; if ((diff1Equator*diff2Equator)<0)) { if (shortStoc1Equator>longStoc1Equator) isCrossedEquator = 1; else isCrossedEquator = 2; } // Equator Stoc End ------------------------------------------------ // Equator Stoc End //+------------------------------------------------------------------------------------+ //| エキスパート終了関数|ラインが交差し、ローソク足が閉じた時のみトリガートレードを設定する|/// //+------------------------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| エキスパート終了関数|ストキャストトリガー //+------------------------------------------------------------------+ //| エキスパートスタート機能|トリガーオーダー //+------------------------------------------------------------------------------------------------------------+ total = OrdersTotal(); if(total < 2) //取引開始回数を制限する { if(isCrossed == 1 && isCrossedEquator == 1) { 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()); else Print("BUY注文の開始エラー :",GetLastError())。 return(0); } if(isCrossed == 2 && isCrossedEquator == 2) { 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); } //+------------------------------------------------------------------+ //| エキスパートエンド関数 //+------------------------------------------------------------------+ テランス 私のテストでは、そのEAが動作します。 以下は、テスト結果とバックテストレポートです。1分のタイムフレームでテストしました。 ファイル: tk.zip 16 kb result.gif 13 kb Mastercash 2013.06.06 23:09 #3265 こんにちは、すべて、plsは誰かがちょうど下のこのコードで私を助けることができる、、、それは私に音の警告を与え続ける代わりに、取引の必要な条件がトリガされたときだけ、すべてのティックで!私は、このコードで私を助けることができる、、、、、、、、、、、、、、。私は全てのティックや新しいローソク足が形成された時にアラートを鳴らしたいのではありません。 #プロパティ indicator_chart_window #property indicator_buffers 2(プロパティ インジケーターバッファ2 #property indicator_color1 Lime(プロパティ インジケーターカラー1ライム #property indicator_color2 Red(インジケーターカラー2 レッド //---- 入力パラメータ extern int ADXbars=14; extern int CountBars=350; //---- バッファ double val1[]; double val2[]; double b4plusdi,nowplusdi,b4minusdi,nowminusdi。 //+------------------------------------------------------------------+ //| カスタムインジケータ非初期化関数 //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| カスタムインジケーターイテレーション関数 //+------------------------------------------------------------------+ int init() { //--インジケーターショートネーム IndicatorShortName("PipsdatorPro1("+Symbol()+")"); //---- インジケータライン IndicatorBuffers(2); SetIndexStyle(0,DRAW_ARROW).SetIndexStyle(0,DRAW_ARROW)。 SetIndexArrow(0,233)を設定します。 SetIndexStyle(1,DRAW_ARROW)を設定します。 SetIndexArrow(1,234)を設定します。 SetIndexBuffer(0,val1)を設定します。 SetIndexBuffer(1,val2)を設定します。 //---- return(0); } //+------------------------------------------------------------------+ //| AltrTrend_Signal_v2_2|||||。 //+------------------------------------------------------------------+ int start() { if (CountBars>=Bars) CountBars=Bars; SetIndexDrawBegin(0,Bars-CountBars)を設定します。 SetIndexDrawBegin(1,Bars-CountBars)。 int i,shift,counted_bars=IndicatorCounted(); //---- エラーの可能性をチェック if(counted_bars<0) return(-1); //---- 初期値ゼロ if(counted_bars<1) { for(i=1;i<=CountBars;i++) val1[CountBars-i]=0.0; for(i=1;i<=CountBars;i++) val2[CountBars-i]=0.0。 } for (shift = CountBars; shift>=0; shift--) { b4plusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift-1)となります。 nowplusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift); nowplusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift); b4minusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift-1); nowplusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift-1); nowminusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift); b4plusdi=iADX(NULL,0,PRICE_CLOSE,MODE_MINUSDI,shift); if (b4plusdi>b4minusdi && nowplusdi<nowminusdi && i!=1) { val1[shift]=Low[shift]-5*Point; // Alert("Buy Arrow","\n", "Current time is ",TimeToStr(CurTime())," \n",Symbol())); i++; } if (b4plusdinowminusdi && i!=1) { val2[shift]=High[shift]+5*ポイント。 // Alert("Sell Arrow","\n", "Current time is ",TimeToStr(CurTime()),"\n",Symbol())); i++; } } return(0); //+---------------------------------------------------------------+ [アーカイブ!】どんなルーキーの質問でも、フォーラムを散らかさないように。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 2. How to code? [Archive!] Any rookie question, William Snyder 2013.06.06 23:41 #3266 Mastercash: Hi all, pls can someone just help me with this code below,,,, it continuing giving me sound alert at every tick instead of only when the trading required conditions are triggered!私はアラートがすべてのティックまたは新しいローソク足が形成されているときに鳴らされることを望んでいません。#property indicator_chart_window #property インジケーターバッファー2 #property indicator_color1 ライム #property indicator_color2 Red(インジケーターカラー2 レッド //---- 入力パラメータ extern int ADXbars=14; extern int CountBars=350; //---- バッファ double val1[]; double val2[]; double b4plusdi,nowplusdi,b4minusdi,nowminusdi。 //+------------------------------------------------------------------+ //| カスタムインジケータ非初期化関数 //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| カスタムインジケーターイテレーション関数 //+------------------------------------------------------------------+ int init() { //-- インジケーターショートネーム IndicatorShortName("PipsdatorPro1("+Symbol()+")"); //---- インジケータライン IndicatorBuffers(2); SetIndexStyle(0,DRAW_ARROW).SetIndexStyle(0,DRAW_ARROW)。 SetIndexArrow(0,233)を設定します。 SetIndexStyle(1,DRAW_ARROW)を設定します。 SetIndexArrow(1,234)を設定します。 SetIndexBuffer(0,val1)を設定します。 SetIndexBuffer(1,val2)を設定します。 //---- return(0); } //+------------------------------------------------------------------+ //| AltrTrend_Signal_v2_2|||||。 //+------------------------------------------------------------------+ int start() { if (CountBars>=Bars) CountBars=Bars; SetIndexDrawBegin(0,Bars-CountBars)を設定します。 SetIndexDrawBegin(1,Bars-CountBars)。 int i,shift,counted_bars=IndicatorCounted(); //---- エラーの可能性をチェック if(counted_bars<0) return(-1); //---- 初期値ゼロ if(counted_bars<1) { for(i=1;i<=CountBars;i++) val1[CountBars-i]=0.0; for(i=1;i<=CountBars;i++) val2[CountBars-i]=0.0。 } for (shift = CountBars; shift>=0; shift--) { b4plusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift-1)となります。 nowplusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift); nowplusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift); b4minusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift-1); nowplusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift-1); nowminusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift); b4plusdi=iADX(NULL,0,PRICE_CLOSE,MODE_MINUSDI,shift); if (b4plusdi>b4minusdi && nowplusdi<nowminusdi && i!=1) { val1[shift]=Low[shift]-5*Point; // Alert("Buy Arrow","\n", "Current time is ",TimeToStr(CurTime())," \n",Symbol())); i++; } if (b4plusdinowminusdi && i!=1) { val2[shift]=High[shift]+5*ポイント。 // Alert("Sell Arrow","\n", "Current time is ",TimeToStr(CurTime()),"\n",Symbol())); i++; } } return(0); } //+---------------------------------------------------------------+ マスターキャッシュ、そのインジケータのバージョンがここにあります https://www.mql5.com/en/forum/173574/page320多分 それが役に立つでしょう。 tkuan77 2013.06.09 03:19 #3267 mladen: テランス私のテストでは、そのEAは動作します。 テスト結果とバックテストレポートです。1分のタイムフレームでテスト こんにちは、mladenさん。あなたのコメントに従ってコードを再確認したところ、私のストキャスティックラインの両方が同じキャンドルで上または下にトリガーされたときのみトレードがトリガーされることに気づきました。 しかし、私が達成しようとしているのは、赤道が上昇トレンドであることを示す上にクロスしている場合、EAは赤道と高速インジケータが同じキャンドルで同じ方向にトリガされるのではなく、高速インジケータが上にトリガされたときにのみロング トリガーを出すということです。 その条件に合うようにEAをチューニングしようとしたのですが、思うような結果が得られませんでした。何か間違ったことをしているのでしょうか?どうか助けてください。本当にありがとうございます。 返信 テランス Mladen Rakic 2013.06.09 05:37 #3268 tkuan77: こんにちは、mladenさん。あなたのコメントに従ってコードを再確認したところ、私のストキャスティックラインの両方が同じキャンドルで上か下にトリガーされたときのみ、トレードがトリガーされることに気づきました。 しかし、私が達成しようとしていることは、赤道指標は上昇トレンドを示す上に交差している場合、EAは同じキャンドルで同じ方向に赤道と高速指標の両方をトリガさせるのではなく、高速指標は上にトリガしたときにのみロングトリガーをかけ、逆も同様とすることである。 その条件に合うようにEAをチューニングしようとしたのですが、思うような結果が得られませんでした。何か間違ったことをしているのでしょうか?どうか助けてください。本当にありがとうございます。 返信 テランス テランス おそらく、それを達成するためにカスタムインジケーターを 書く必要があるでしょう(EAのいくつかのことは、単にあなたがそれを行うのと同じ方法でインジケータを行うことはできません)。 tkuan77 2013.06.09 06:34 #3269 mladen: Terrance そのためには、おそらくカスタムインジケーターを書く必要があるでしょう(EAには、インジケーターと同じようにはできないものがあります)。 mladenさん、1つわからないことがあるのですが、同じような条件であるにもかかわらず、なぜiMAではなくMAでこのようなことができるのでしょうか?インジケーターの設定でしょうか? よろしくお願いします。 テランス Mladen Rakic 2013.06.09 09:12 #3270 tkuan77: mladenさん、1つわからないことがあるのですが、同じような条件であるにもかかわらず、なぜiMAではなくMAでこれができるのでしょうか?インジケーターの設定でしょうか?ご指摘の通りです。 テランス カスタムインディケータでは、2つのティックの間の状態(トレンド)を保存することができますが、iMAを使用するとできないからです(ほんの一例です)。 1...320321322323324325326327328329330331332333334...347 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
こんにちは、私はStocasticのEAでこのようなエラーが発生しました。
私の基準はこのようなものです。
私のstocEquatorが上にクロスするとき(Uptrend)、私のstocTriggerが上にクロスするとロングだけがトリガーされ、stocEquatorが下にクロスするとき(Downtrend)、stocTriggerが下にクロスするとショートだけが トリガーされます。
しかし、テストのためにEAを実行すると、取引がトリガーされないので、何が問題なのかと思い、どなたかここで助けていただけると幸いです。
よろしくお願いします。
よろしくお願いします。
テランス
int isCrossedTrigger= 0;
double shortStoc1Trigger= iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);
double longStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1);
double shortStoc2Trigger= iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);
double longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2); double longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2)
double diff1Trigger= shortStoc1Trigger-longStoc1Trigger;
double diff2Trigger= shortStoc2Trigger-longStoc2Trigger; double diff2Trigger= shortStoc2Trigger-longStoc2Trigger;
if ((diff1Trigger*diff2Trigger)<0))
{
if (shortStoc1Trigger>longStoc1Trigger)
isCrossedTrigger= 1;
else isCrossedTrigger= 2;
int isCrossedEquator = 0;
double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,1).double longStoc1Equator = iStochastic(NULL);
double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1)。
double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,2)。
double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2)。
double diff1Equator = shortStoc1Equator-longStoc1Equator.Double diff2Equator = shortStoc1Equator-longStoc1Equator;
double diff2Equator = shortStoc2Equator-longStoc2Equator; double diff2Equator = shortStoc2Equator-longStoc2Equator;
if ((diff1Equator*diff2Equator)<0))
{
if (shortStoc1Equator>longStoc1Equator)
isCrossedEquator = 1;
else isCrossedEquator = 2;
}
if(total < 2)
{
if(isCrossedTrigger== 1 && isCrossedEquator == 1)
{
買う
}
if(isCrossedTrigger== 2 && isCrossedEquator == 2)
{
売り
return(0);
}
return(0);
こんにちは、私はストキャスティックのEAでこのようなエラーが発生しました。
私の基準はこんな感じです。
私のstocEquatorが上にクロスするとき(Uptrend)、私のstocTriggerが上にクロスするときだけロングがトリガーされ、stocEquatorが下にクロスするとき(Downtrend)、stocTriggerが下にクロスするときだけショートがトリガーされるでしょう。
しかし、テストのためにEAを実行すると、取引がトリガーされないので、何が問題なのかと思い、どなたかここで助けていただけると幸いです。
よろしくお願いします。
よろしくお願いします。
テランス
int isCrossedTrigger= 0;
double shortStoc1Trigger= iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);
double longStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1);
double shortStoc2Trigger= iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);
double longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2); double longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2)
double diff1Trigger= shortStoc1Trigger-longStoc1Trigger;
double diff2Trigger= shortStoc2Trigger-longStoc2Trigger; double diff2Trigger= shortStoc2Trigger-longStoc2Trigger;
if ((diff1Trigger*diff2Trigger)<0))
{
if (shortStoc1Trigger>longStoc1Trigger)
isCrossedTrigger= 1;
else isCrossedTrigger= 2;
int isCrossedEquator = 0;
double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,1).double longStoc1Equator = iStochastic(NULL);
double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1)。
double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,2)。
double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2).NULLの場合は、1.5倍。
double diff1Equator = shortStoc1Equator-longStoc1Equator.Double diff2Equator = shortStoc1Equator-longStoc1Equator;
double diff2Equator = shortStoc2Equator-longStoc2Equator; double diff2Equator = shortStoc2Equator-longStoc2Equator;
if ((diff1Equator*diff2Equator)<0))
{
if (shortStoc1Equator>longStoc1Equator)
isCrossedEquator = 1;
else isCrossedEquator = 2;
}
if(total < 2)
{
if(isCrossedTrigger== 1 && isCrossedEquator == 1)
{
買う
}
if(isCrossedTrigger== 2 && isCrossedEquator == 2)
{
売り
return(0);
}
return(0)です。テランス
私がチェックできなかった唯一のものは、 "合計 "変数です。
total変数が適切に設定されていれば、このコードは動作するはずです。これは、私があなたの条件で使用したテストインジケータ であり、それは有効な売買シグナルを発生させています(ビジュアルモードでインジケータを実行すると、それが警告されたときに表示されます)ので、エラーは他の場所にあるのです。
#property indicator_buffers 0
//------------------------------------------------------------------
//
//------------------------------------------------------------------
int init()
{
return(0);
}
//------------------------------------------------------------------
//
//------------------------------------------------------------------
int start()
{
int total = 0;
int isCrossedTrigger= 0;
double shortStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);
double longStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1) ;
double shortStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);
double longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2) ;
double diff1Trigger = shortStoc1Trigger-longStoc1Trigger;
double diff2Trigger = shortStoc2Trigger-longStoc2Trigger;
if ((diff1Trigger*diff2Trigger)<0)
{
if (shortStoc1Trigger>longStoc1Trigger)
isCrossedTrigger= 1;
else isCrossedTrigger= 2;
}
int isCrossedEquator = 0;
double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN, 1);
double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);
double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN, 2);
double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);
double diff1Equator = shortStoc1Equator-longStoc1Equator;
double diff2Equator = shortStoc2Equator-longStoc2Equator;
if ((diff1Equator*diff2Equator)<0)
{
if (shortStoc1Equator>longStoc1Equator)
isCrossedEquator = 1;
else isCrossedEquator = 2;
}
//
//
//
//
//
if(total < 2)
{
if(isCrossedTrigger== 1 && isCrossedEquator == 1)
{
Alert("Buy at : "+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS));
}
if(isCrossedTrigger== 2 && isCrossedEquator == 2)
{
Alert("Sell at : "+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS));
}
}
return(0);
}mladenさん、こんにちは。私のコードを見てみましたが、"total "変数が何を意味しているのか分かりませんでした。私のエラーの原因は何でしょうか?
よろしくお願いします。
テランス
//+------------------------------------------------------------------+
//| My_First_EA.mq4(英語版)
//| TK
||MetaTrader 4 Trading Platform / MetaQuotes Software Corp.|
//+------------------------------------------------------------------+
#property copyright "TK"
#property link "http://www.metaquotes.net"
//--- 入力パラメータ
extern double TakeProfit=500.0;
extern double Lots=0.1;
extern double StopLoss=500.0;
//+------------------------------------------------------------------+
//| エキスパート初期化関数
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| エキスパート初期化関数
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| エキスパートスタート機能
//+------------------------------------------------------------------+
datetime newbar;
int start()
{
if(newbar==Time[0])return(0)。
else newbar=Time[0]です。
int ticket, total;
if(Bars<100)
{
Print("bars less than 100");
return(0);
}
if(テイクプロフィット<10)
{
Print("TakeProfitが10未満");
return(0)。
}
//+------------------------------------------------------------------+
//|エキスパートスタート機能|ストキャストトリガー
//+------------------------------------------------------------------+
// shortStoc = iStochastic(NULL,0,7,15,17,MODE_LWMA,0,MODE_MAIN,0); /orignialストキャスティックの動き
// longStoc = iStochastic(NULL,0,7,15,17,MODE_LWMA,0,MODE_SIGNAL,0); /またはStocを無視した動きです。
//+--------------------------------------------------------------------------------------+
//| エキスパートスタート機能| ラインが交差し、ローソク足が閉じたときのみトリガートレードを設定する|///
//+--------------------------------------------------------------------------------------+
int isCrossed = 0;
double shortStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);
double longStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1); double longStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,1);
double shortStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2); double longStoc2 = iStochastic(NULL,0,3,5,6,0,MODE_MAIN,2);
double longStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2); double longStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1);
double diff1 = shortStoc1-longStoc1;
double diff2 = shortStoc2-longStoc2; double diff1 = shortStoc1-longStoc1; double diff2 = shortStoc2-longStoc2;
if ((diff1*diff2)<0))
{
if (shortStoc1>longStoc1)
isCrossed = 1;
else isCrossed = 2;
}
// Equator Stoc スタート ----------------------------------------
int isCrossedEquator = 0;
double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,1).double longStoc1Equator = iStochastic(NULL);
double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1)。
double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,2)。
double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2).NULLの場合は、1.5倍。
double diff1Equator = shortStoc1Equator-longStoc1Equator.Double diff2Equator = shortStoc1Equator-longStoc1Equator;
double diff2Equator = shortStoc2Equator-longStoc2Equator; double diff2Equator = shortStoc2Equator-longStoc2Equator;
if ((diff1Equator*diff2Equator)<0))
{
if (shortStoc1Equator>longStoc1Equator)
isCrossedEquator = 1;
else isCrossedEquator = 2;
}
// Equator Stoc End ------------------------------------------------ // Equator Stoc End
//+------------------------------------------------------------------------------------+
//| エキスパート終了関数|ラインが交差し、ローソクが閉じた時のみトリガートレードを設定する|///
//+------------------------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| エキスパート終了関数|ストキャストトリガー
//+------------------------------------------------------------------+
//| エキスパートスタート機能|トリガーオーダー
//+------------------------------------------------------------------------------------------------------------+
total = OrdersTotal();
if(total < 2) //取引開始回数を制限する
{
if(isCrossed == 1 && isCrossedEquator == 1)
{
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());
else Print("BUY注文の開始エラー :",GetLastError())。
return(0);
}
if(isCrossed == 2 && isCrossedEquator == 2)
{
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);
}
//+------------------------------------------------------------------+
//| エキスパートエンド関数
//+------------------------------------------------------------------+
テランス
唯一ノーチェックだったのは「total」変数です
total変数が適切に設定されていれば、このコードは動作するはずです。これは、私があなたの条件で使用したテストインディケータで、有効な売買シグナルを発生させています(インディケータをビジュアルモードで実行すると、警告が出るのがわかります)ので、エラーはどこか他の場所にあります。
#property indicator_buffers 0
//------------------------------------------------------------------
//
//------------------------------------------------------------------
int init()
{
return(0);
}
//------------------------------------------------------------------
//
//------------------------------------------------------------------
int start()
{
int total = 0;
int isCrossedTrigger= 0;
double shortStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);
double longStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1) ;
double shortStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);
double longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2) ;
double diff1Trigger = shortStoc1Trigger-longStoc1Trigger;
double diff2Trigger = shortStoc2Trigger-longStoc2Trigger;
if ((diff1Trigger*diff2Trigger)<0)
{
if (shortStoc1Trigger>longStoc1Trigger)
isCrossedTrigger= 1;
else isCrossedTrigger= 2;
}
int isCrossedEquator = 0;
double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN, 1);
double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);
double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN, 2);
double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);
double diff1Equator = shortStoc1Equator-longStoc1Equator;
double diff2Equator = shortStoc2Equator-longStoc2Equator;
if ((diff1Equator*diff2Equator)<0)
{
if (shortStoc1Equator>longStoc1Equator)
isCrossedEquator = 1;
else isCrossedEquator = 2;
}
//
//
//
//
//
if(total < 2)
{
if(isCrossedTrigger== 1 && isCrossedEquator == 1)
{
Alert("Buy at : "+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS));
}
if(isCrossedTrigger== 2 && isCrossedEquator == 2)
{
Alert("Sell at : "+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS));
}
}
return(0);
}mladenさん、ありがとうございます。私は戻って私のコードを見て、あなたが "合計 "変数によって意味するものを理解することができませんでした。私のエラーの原因は何でしょうか?
採用情報
テランス
//+------------------------------------------------------------------+
//| My_First_EA.mq4(マイファースト・イーエー)
|| TK
||MetaTrader 4 Trading Platform / MetaQuotes Software Corp.|
//+------------------------------------------------------------------+
#property copyright "TK"
#property link "http://www.metaquotes.net"
//--- 入力パラメータ
extern double TakeProfit=500.0;
extern double Lots=0.1;
extern double StopLoss=500.0;
//+------------------------------------------------------------------+
//| エキスパート初期化関数
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| エキスパート初期化関数
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| エキスパートスタート機能
//+------------------------------------------------------------------+
datetime newbar;
int start()
{
if(newbar==Time[0])return(0)。
else newbar=Time[0]です。
int ticket, total;
if(Bars<100)
{
Print("bars less than 100");
return(0);
}
if(テイクプロフィット<10)
{
Print("TakeProfitが10未満");
return(0)。
}
//+------------------------------------------------------------------+
//|エキスパートスタート機能|ストキャストトリガー
//+------------------------------------------------------------------+
// shortStoc = iStochastic(NULL,0,7,15,17,MODE_LWMA,0,MODE_MAIN,0); /有機ストックの動き
// longStoc = iStochastic(NULL,0,7,15,17,MODE_LWMA,0,MODE_SIGNAL,0); /またはStocを無視した動きです。
//+--------------------------------------------------------------------------------------+
//| エキスパートスタート機能| ラインが交差し、ローソク足が閉じたときのみトリガートレードを設定する|///
//+--------------------------------------------------------------------------------------+
int isCrossed = 0;
double shortStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);
double longStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1); double longStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,1);
double shortStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2); double longStoc2 = iStochastic(NULL,0,3,5,6,0,MODE_MAIN,2);
double longStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2); double longStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1);
double diff1 = shortStoc1-longStoc1;
double diff2 = shortStoc2-longStoc2; double diff1 = shortStoc1-longStoc1; double diff2 = shortStoc2-longStoc2;
if ((diff1*diff2)<0))
{
if (shortStoc1>longStoc1)
isCrossed = 1;
else isCrossed = 2;
}
// Equator Stoc スタート ----------------------------------------
int isCrossedEquator = 0;
double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,1).double longStoc1Equator = iStochastic(NULL);
double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1)。
double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,2)。
double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2)。
double diff1Equator = shortStoc1Equator-longStoc1Equator.Double diff2Equator = shortStoc1Equator-longStoc1Equator;
double diff2Equator = shortStoc2Equator-longStoc2Equator; double diff2Equator = shortStoc2Equator-longStoc2Equator;
if ((diff1Equator*diff2Equator)<0))
{
if (shortStoc1Equator>longStoc1Equator)
isCrossedEquator = 1;
else isCrossedEquator = 2;
}
// Equator Stoc End ------------------------------------------------ // Equator Stoc End
//+------------------------------------------------------------------------------------+
//| エキスパート終了関数|ラインが交差し、ローソク足が閉じた時のみトリガートレードを設定する|///
//+------------------------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| エキスパート終了関数|ストキャストトリガー
//+------------------------------------------------------------------+
//| エキスパートスタート機能|トリガーオーダー
//+------------------------------------------------------------------------------------------------------------+
total = OrdersTotal();
if(total < 2) //取引開始回数を制限する
{
if(isCrossed == 1 && isCrossedEquator == 1)
{
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());
else Print("BUY注文の開始エラー :",GetLastError())。
return(0);
}
if(isCrossed == 2 && isCrossedEquator == 2)
{
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);
}
//+------------------------------------------------------------------+
//| エキスパートエンド関数
//+------------------------------------------------------------------+テランス
私のテストでは、そのEAが動作します。
以下は、テスト結果とバックテストレポートです。1分のタイムフレームでテストしました。
こんにちは、すべて、plsは誰かがちょうど下のこのコードで私を助けることができる、、、それは私に音の警告を与え続ける代わりに、取引の必要な条件がトリガされたときだけ、すべてのティックで!私は、このコードで私を助けることができる、、、、、、、、、、、、、、。私は全てのティックや新しいローソク足が形成された時にアラートを鳴らしたいのではありません。
#プロパティ indicator_chart_window
#property indicator_buffers 2(プロパティ インジケーターバッファ2
#property indicator_color1 Lime(プロパティ インジケーターカラー1ライム
#property indicator_color2 Red(インジケーターカラー2 レッド
//---- 入力パラメータ
extern int ADXbars=14;
extern int CountBars=350;
//---- バッファ
double val1[];
double val2[];
double b4plusdi,nowplusdi,b4minusdi,nowminusdi。
//+------------------------------------------------------------------+
//| カスタムインジケータ非初期化関数
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| カスタムインジケーターイテレーション関数
//+------------------------------------------------------------------+
int init()
{
//--インジケーターショートネーム
IndicatorShortName("PipsdatorPro1("+Symbol()+")");
//---- インジケータライン
IndicatorBuffers(2);
SetIndexStyle(0,DRAW_ARROW).SetIndexStyle(0,DRAW_ARROW)。
SetIndexArrow(0,233)を設定します。
SetIndexStyle(1,DRAW_ARROW)を設定します。
SetIndexArrow(1,234)を設定します。
SetIndexBuffer(0,val1)を設定します。
SetIndexBuffer(1,val2)を設定します。
//----
return(0);
}
//+------------------------------------------------------------------+
//| AltrTrend_Signal_v2_2|||||。
//+------------------------------------------------------------------+
int start()
{
if (CountBars>=Bars) CountBars=Bars;
SetIndexDrawBegin(0,Bars-CountBars)を設定します。
SetIndexDrawBegin(1,Bars-CountBars)。
int i,shift,counted_bars=IndicatorCounted();
//---- エラーの可能性をチェック
if(counted_bars<0) return(-1);
//---- 初期値ゼロ
if(counted_bars<1)
{
for(i=1;i<=CountBars;i++) val1[CountBars-i]=0.0;
for(i=1;i<=CountBars;i++) val2[CountBars-i]=0.0。
}
for (shift = CountBars; shift>=0; shift--)
{
b4plusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift-1)となります。
nowplusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift); nowplusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift);
b4minusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift-1); nowplusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift-1);
nowminusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift); b4plusdi=iADX(NULL,0,PRICE_CLOSE,MODE_MINUSDI,shift);
if (b4plusdi>b4minusdi && nowplusdi<nowminusdi && i!=1)
{
val1[shift]=Low[shift]-5*Point;
// Alert("Buy Arrow","\n", "Current time is ",TimeToStr(CurTime())," \n",Symbol()));
i++;
}
if (b4plusdinowminusdi && i!=1)
{
val2[shift]=High[shift]+5*ポイント。
// Alert("Sell Arrow","\n", "Current time is ",TimeToStr(CurTime()),"\n",Symbol()));
i++;
}
}
return(0);
//+---------------------------------------------------------------+
Hi all, pls can someone just help me with this code below,,,, it continuing giving me sound alert at every tick instead of only when the trading required conditions are triggered!私はアラートがすべてのティックまたは新しいローソク足が形成されているときに鳴らされることを望んでいません。
#property indicator_chart_window
#property インジケーターバッファー2
#property indicator_color1 ライム
#property indicator_color2 Red(インジケーターカラー2 レッド
//---- 入力パラメータ
extern int ADXbars=14;
extern int CountBars=350;
//---- バッファ
double val1[];
double val2[];
double b4plusdi,nowplusdi,b4minusdi,nowminusdi。
//+------------------------------------------------------------------+
//| カスタムインジケータ非初期化関数
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| カスタムインジケーターイテレーション関数
//+------------------------------------------------------------------+
int init()
{
//-- インジケーターショートネーム
IndicatorShortName("PipsdatorPro1("+Symbol()+")");
//---- インジケータライン
IndicatorBuffers(2);
SetIndexStyle(0,DRAW_ARROW).SetIndexStyle(0,DRAW_ARROW)。
SetIndexArrow(0,233)を設定します。
SetIndexStyle(1,DRAW_ARROW)を設定します。
SetIndexArrow(1,234)を設定します。
SetIndexBuffer(0,val1)を設定します。
SetIndexBuffer(1,val2)を設定します。
//----
return(0);
}
//+------------------------------------------------------------------+
//| AltrTrend_Signal_v2_2|||||。
//+------------------------------------------------------------------+
int start()
{
if (CountBars>=Bars) CountBars=Bars;
SetIndexDrawBegin(0,Bars-CountBars)を設定します。
SetIndexDrawBegin(1,Bars-CountBars)。
int i,shift,counted_bars=IndicatorCounted();
//---- エラーの可能性をチェック
if(counted_bars<0) return(-1);
//---- 初期値ゼロ
if(counted_bars<1)
{
for(i=1;i<=CountBars;i++) val1[CountBars-i]=0.0;
for(i=1;i<=CountBars;i++) val2[CountBars-i]=0.0。
}
for (shift = CountBars; shift>=0; shift--)
{
b4plusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift-1)となります。
nowplusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift); nowplusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift);
b4minusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift-1); nowplusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift-1);
nowminusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift); b4plusdi=iADX(NULL,0,PRICE_CLOSE,MODE_MINUSDI,shift);
if (b4plusdi>b4minusdi && nowplusdi<nowminusdi && i!=1)
{
val1[shift]=Low[shift]-5*Point;
// Alert("Buy Arrow","\n", "Current time is ",TimeToStr(CurTime())," \n",Symbol()));
i++;
}
if (b4plusdinowminusdi && i!=1)
{
val2[shift]=High[shift]+5*ポイント。
// Alert("Sell Arrow","\n", "Current time is ",TimeToStr(CurTime()),"\n",Symbol()));
i++;
}
}
return(0);
}
//+---------------------------------------------------------------+マスターキャッシュ、そのインジケータのバージョンがここにあります https://www.mql5.com/en/forum/173574/page320多分 それが役に立つでしょう。
テランス
私のテストでは、そのEAは動作します。
テスト結果とバックテストレポートです。1分のタイムフレームでテストこんにちは、mladenさん。あなたのコメントに従ってコードを再確認したところ、私のストキャスティックラインの両方が同じキャンドルで上または下にトリガーされたときのみトレードがトリガーされることに気づきました。
しかし、私が達成しようとしているのは、赤道が上昇トレンドであることを示す上にクロスしている場合、EAは赤道と高速インジケータが同じキャンドルで同じ方向にトリガされるのではなく、高速インジケータが上にトリガされたときにのみロング トリガーを出すということです。
その条件に合うようにEAをチューニングしようとしたのですが、思うような結果が得られませんでした。何か間違ったことをしているのでしょうか?どうか助けてください。本当にありがとうございます。
返信
テランス
こんにちは、mladenさん。あなたのコメントに従ってコードを再確認したところ、私のストキャスティックラインの両方が同じキャンドルで上か下にトリガーされたときのみ、トレードがトリガーされることに気づきました。
しかし、私が達成しようとしていることは、赤道指標は上昇トレンドを示す上に交差している場合、EAは同じキャンドルで同じ方向に赤道と高速指標の両方をトリガさせるのではなく、高速指標は上にトリガしたときにのみロングトリガーをかけ、逆も同様とすることである。
その条件に合うようにEAをチューニングしようとしたのですが、思うような結果が得られませんでした。何か間違ったことをしているのでしょうか?どうか助けてください。本当にありがとうございます。
返信
テランステランス
おそらく、それを達成するためにカスタムインジケーターを 書く必要があるでしょう(EAのいくつかのことは、単にあなたがそれを行うのと同じ方法でインジケータを行うことはできません)。
Terrance そのためには、おそらくカスタムインジケーターを書く必要があるでしょう(EAには、インジケーターと同じようにはできないものがあります)。
mladenさん、1つわからないことがあるのですが、同じような条件であるにもかかわらず、なぜiMAではなくMAでこのようなことができるのでしょうか?インジケーターの設定でしょうか?
よろしくお願いします。
テランス
mladenさん、1つわからないことがあるのですが、同じような条件であるにもかかわらず、なぜiMAではなくMAでこれができるのでしょうか?インジケーターの設定でしょうか?
ご指摘の通りです。
テランスカスタムインディケータでは、2つのティックの間の状態(トレンド)を保存することができますが、iMAを使用するとできないからです(ほんの一例です)。