int AnaliseFunc (string sy, int tf)
{
CurAsk =MarketInfo(Symbol(),MODE_ASK);
CurBid =MarketInfo(Symbol(),MODE_BID);
OpnPrice =iOpen(NULL,PERIOD_M5,0);
OpnPrice1=iOpen(NULL,PERIOD_M5,1);
ClsPrice1=iClose(NULL,PERIOD_M5,1);
if (sy=="" || sy=="0") sy=Symbol();
double
BB_1 =iCustom(sy,tf,"BB_MA",13,1,1,1),
BB_2 =iCustom(sy,tf,"BB_MA",13,1,1,2),
BB_3 =iCustom(sy,tf,"BB_MA",13,1,1,3),
AO1 =iAO(sy,tf,1),
AO2 =iAO(sy,tf,2),
AO3 =iAO(sy,tf,3),
AC1 =NormalizeDouble(iAC(sy,tf,1),8)*1000,
AC2 =NormalizeDouble(iAC(sy,tf,2),8)*1000,
AC3 =NormalizeDouble(iAC(sy,tf,3),8)*1000,
AC4 =NormalizeDouble(iAC(sy,tf,4),8)*1000,
AC5 =NormalizeDouble(iAC(sy,tf,5),8)*1000,
SpMan1=iCustom(sy,tf,"SpearmanRankCorr",14,1000,30,true,0,1),
SpMan2=iCustom(sy,tf,"SpearmanRankCorr",14,1000,30,true,0,2),
DeM_1 =iDeMarker(sy,tf,14,1),
DeM_2 =iDeMarker(sy,tf,14,2),
Mom_1 =iMomentum(sy,tf,14,PRICE_CLOSE,1),
Mom_2 =iMomentum(sy,tf,14,PRICE_CLOSE,2),
Mom_3 =iMomentum(sy,tf,14,PRICE_CLOSE,3);
//---------------- Проверка на разворот BB_MA ------------------------------------------------------- if (BB_1>BB_2 && BB_2<=BB_3 && BB_1<0) // Найден разворот BB вверх
{
switch (tf)
{
case1: TrBBTurnUP_M1 =true; TrBBTurnDN_M1=false; // Флаг разворота вверх на М1case5: TrBBTurnUP_M5 =true; TrBBTurnDN_M5=false; // Флаг разворота вверх на М5case15: TrBBTurnUP_M15=true; TrBBTurnDN_M15=false; // Флаг разворота вверх на М15 case30: TrBBTurnUP_M30=true; TrBBTurnDN_M30=false; // Флаг разворота вверх на М30 case60: TrBBTurnUP_H1 =true; TrBBTurnDN_H1=false; // Флаг разворота вверх на H1case240: TrBBTurnUP_H4 =true; TrBBTurnDN_H4=false; // Флаг разворота вверх на H4case1440: TrBBTurnUP_D1 =true; TrBBTurnDN_D1=false; // Флаг разворота вверх на D1case10080: TrBBTurnUP_W1 =true; TrBBTurnDN_W1=false; // Флаг разворота вверх на W1case43200: TrBBTurnUP_MN =true; TrBBTurnDN_MN=false; // Флаг разворота вверх на MN
}
}
if (BB_1<BB_2 && BB_2>=BB_3 && BB_1>0) // Найден разворот BB вниз
{
switch (tf)
{
case1: TrBBTurnUP_M1 =false; TrBBTurnDN_M1=true; // Флаг разворота вниз на М1case5: TrBBTurnUP_M5 =false; TrBBTurnDN_M5=true; // Флаг разворота вниз на М5case15: TrBBTurnUP_M15=false; TrBBTurnDN_M15=true; // Флаг разворота вниз на М15 case30: TrBBTurnUP_M30=false; TrBBTurnDN_M30=true; // Флаг разворота вниз на М30 case60: TrBBTurnUP_H1 =false; TrBBTurnDN_H1=true; // Флаг разворота вниз на H1case240: TrBBTurnUP_H4 =false; TrBBTurnDN_H4=true; // Флаг разворота вниз на H4case1440: TrBBTurnUP_D1 =false; TrBBTurnDN_D1=true; // Флаг разворота вниз на D1case10080: TrBBTurnUP_W1 =false; TrBBTurnDN_W1=true; // Флаг разворота вниз на W1case43200: TrBBTurnUP_MN =false; TrBBTurnDN_MN=true; // Флаг разворота вниз на MN
}
}
//---------------------- Проверка на разворот Momentum -----------------------------------------------if (Mom_1>Mom_2 && Mom_2<=Mom_3 && Mom_1<100.0)
{
switch (tf)
{
case1: TrMomTurnUP_M1 =true; TrMomTurnDN_M1=false; // Флаг разворота вверх на М1case5: TrMomTurnUP_M5 =true; TrMomTurnDN_M5=false; // Флаг разворота вверх на М5case15: TrMomTurnUP_M15=true; TrMomTurnDN_M15=false; // Флаг разворота вверх на М15 case30: TrMomTurnUP_M30=true; TrMomTurnDN_M30=false; // Флаг разворота вверх на М30 case60: TrMomTurnUP_H1 =true; TrMomTurnDN_H1=false; // Флаг разворота вверх на H1case240: TrMomTurnUP_H4 =true; TrMomTurnDN_H4=false; // Флаг разворота вверх на H4case1440: TrMomTurnUP_D1 =true; TrMomTurnDN_D1=false; // Флаг разворота вверх на D1case10080: TrMomTurnUP_W1 =true; TrMomTurnDN_W1=false; // Флаг разворота вверх на W1case43200: TrMomTurnUP_MN =true; TrMomTurnDN_MN=false; // Флаг разворота вверх на MN
}
}
if (Mom_1<Mom_2 && Mom_2>=Mom_3 && Mom_1>100.0)
{
switch (tf)
{
case1: TrMomTurnUP_M1 =false; TrMomTurnDN_M1=true; // Флаг разворота вверх на М1case5: TrMomTurnUP_M5 =false; TrMomTurnDN_M5=true; // Флаг разворота вверх на М5case15: TrMomTurnUP_M15=false; TrMomTurnDN_M15=true; // Флаг разворота вверх на М15 case30: TrMomTurnUP_M30=false; TrMomTurnDN_M30=true; // Флаг разворота вверх на М30 case60: TrMomTurnUP_H1 =false; TrMomTurnDN_H1=true; // Флаг разворота вверх на H1case240: TrMomTurnUP_H4 =false; TrMomTurnDN_H4=true; // Флаг разворота вверх на H4case1440: TrMomTurnUP_D1 =false; TrMomTurnDN_D1=true; // Флаг разворота вверх на D1case10080: TrMomTurnUP_W1 =false; TrMomTurnDN_W1=true; // Флаг разворота вверх на W1case43200: TrMomTurnUP_MN =false; TrMomTurnDN_MN=true; // Флаг разворота вверх на MN
}
}
//---------------------- Проверка DeMarker на перепроданность/перекупленность ---------
連絡方法を教えてください。いろいろと疑問があるので、アドバイスをお願いします。
私ならスイッチを既成の配列に置き換えます。なぜ、毎回定義済みの値を割り当てるのでしょうか?
ありがとうございます。でも、もう少し具体的に教えてください。なぜなら、ここでの定義済み値はタイムフレームですが、指標によってケースを追うコードが違ってくるからです...。おそらく、もう少しコードを並べた方が楽なんでしょうけど...。:)昨夜は眠れなかったし、まだ手探り状態です...。
ほら、まったく同じコードが動いているのに、すでに他の指標の取引条件をチェックしている......。EAで使用するすべての指標のチェックを1つの分析ブロックに詰め込み、1ティックに1回その値を計算し、変数に入れ、変数の値を取引判断に使用したいだけです。定義済みの値の配列を使ってアレンジする方法がわからないのですが...。ありがとうございます。でも、もう少し具体的に教えてください。なぜなら、ここでの定義済み値はタイムフレームですが、指標によってケースを追うコードが違ってくるからです...。おそらく、もう少しコードを並べた方が楽なんでしょうけど...。:)今日は考えがまとまりません。昨晩は眠れず、まだ手探り状態です...。
全く同じコードがあるのですが、他の指標の取引条件をすでにチェックしているのです。EAで使用する全ての指標のチェックを一つの分析ブロックに詰め込み、1ティックに一度その値を計算し、変数に入れ、変数の値を取引判断に使用したいだけです。定義済みの値の配列を使ってアレンジする方法がわからないのですが...。もしかしたら、計算の優先順位を選択するだけでよいかもしれません。
(BB_1<0 ) が最初の必須条件で、それ以降は他の BB_ を計算する必要がない場合は、複合 if を作って、最初の if ができていれば、2番目の if で必要な BB_ を計算し、if ... とする。はむしろ効果的で、一方、ifだけでは
そうですね、コードが大きくなって読みにくくなるかもしれませんが、パフォーマンスは上がりますね
は、計算の優先順位をピックアップすればいいだけなのかもしれない、つまり
(BB_1<0 )が最初の必須条件であり、それ以降は他のBB_を計算する必要がないので、複合ifを作り、最初のifが満たされていれば、2番目のifで必要なBB_の計算をし、if .はむしろ効果的で、一方、ifだけでは
コードが大きくなって読みづらくなるのは同意しますが、パフォーマンスは上がります。
イゴールさん、ありがとうございます。それは、私が考えていたのとは違う...。コンピュータが普及し始めた頃、1991年から94年にかけて、よく覚えていないのですが......。ZX Spectrumのアセンブリ言語プログラミングをやっていたのですが......。というのは、恐ろしく遅いし、メモリも64Kbに制限されていた...。そこで、プロセッサに画面のメモリ領域と連動して、その領域に16386Kbを素早く出力するコマンドがあったのです。文書化されたCPUコマンドは、大きなデータセットを扱うコマンドの中で最も高速だった。どうしようもないことだが......。出力速度を4倍にする方法を発見したのだ。スタックを操作するためのコマンドがあり、その実行速度も格段に速くなった。画面のすぐ後にあるメモリの未使用領域にスタックを移動させ、その領域にグラフィックデータを詰め、スタックを画面に移動させた後、メモリ内に用意した画面をスタックを埋めるコマンドで画面領域に素早くジャンプさせる...という方法です。当時としてはただの奇跡だが、スペクトラムにとっては魔法だった...。
ここでも、型にはまらない働き方に興味がある...。どのコマンドが何クロックで実行されるかを見て、似たようなものを作るとか......。論理比較コマンドの代わりになるものは、引き算とか、同じ系統のものかな...。
そして、ここで私は、標準的でない仕事のやり方に興味を持ちました......。どのコマンドが何クロックで実行されるかを調べて、それに近いものを構築するとか......。論理比較コマンドの代わりになるものは、引き算とかでしょうか...。
mqlの原理はC言語の構文を持つJavaに非常に似ています。caseとifのどちらが速く実行できるか試してみてください。
スクリプトからEAを無効にするコマンドを送れるかどうかご存知ですか? 。
できます。例えば私は、グローバル変数を ある状態に設定するスクリプトでEAを制御しています。これらの変数の状態
を Expert Advisor で分析し、必要なコマンドを実行します。