コーディングの方法は? - ページ 327

 

こんにちは、私は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);

 
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);

}
 

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);

}
 
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
 

こんにちは、すべて、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);

//+---------------------------------------------------------------+

 
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多分 それが役に立つでしょう。

 
mladen:
テランス

私のテストでは、そのEAは動作します。

テスト結果とバックテストレポートです。1分のタイムフレームでテスト

こんにちは、mladenさん。あなたのコメントに従ってコードを再確認したところ、私のストキャスティックラインの両方が同じキャンドルで上または下にトリガーされたときのみトレードがトリガーされることに気づきました。

しかし、私が達成しようとしているのは、赤道が上昇トレンドであることを示す上にクロスしている場合、EAは赤道と高速インジケータが同じキャンドルで同じ方向にトリガされるのではなく、高速インジケータが上にトリガされたときにのみロング トリガーを出すということです。

その条件に合うようにEAをチューニングしようとしたのですが、思うような結果が得られませんでした。何か間違ったことをしているのでしょうか?どうか助けてください。本当にありがとうございます。

返信

テランス

 
tkuan77:
こんにちは、mladenさん。あなたのコメントに従ってコードを再確認したところ、私のストキャスティックラインの両方が同じキャンドルで上か下にトリガーされたときのみ、トレードがトリガーされることに気づきました。

しかし、私が達成しようとしていることは、赤道指標は上昇トレンドを示す上に交差している場合、EAは同じキャンドルで同じ方向に赤道と高速指標の両方をトリガさせるのではなく、高速指標は上にトリガしたときにのみロングトリガーをかけ、逆も同様とすることである。

その条件に合うようにEAをチューニングしようとしたのですが、思うような結果が得られませんでした。何か間違ったことをしているのでしょうか?どうか助けてください。本当にありがとうございます。

返信

テランス

テランス

おそらく、それを達成するためにカスタムインジケーターを 書く必要があるでしょう(EAのいくつかのことは、単にあなたがそれを行うのと同じ方法でインジケータを行うことはできません)。

 
mladen:
Terrance そのためには、おそらくカスタムインジケーターを書く必要があるでしょう(EAには、インジケーターと同じようにはできないものがあります)。

mladenさん、1つわからないことがあるのですが、同じような条件であるにもかかわらず、なぜiMAではなくMAでこのようなことができるのでしょうか?インジケーターの設定でしょうか?

よろしくお願いします。

テランス

 
tkuan77:
mladenさん、1つわからないことがあるのですが、同じような条件であるにもかかわらず、なぜiMAではなくMAでこれができるのでしょうか?インジケーターの設定でしょうか?

ご指摘の通りです。

テランス

カスタムインディケータでは、2つのティックの間の状態(トレンド)を保存することができますが、iMAを使用するとできないからです(ほんの一例です)。