int start()
{
double Price=iOpen (Symbol (),0,0);
double SL=NormalizeDouble (Price-3000*Point, Digits);
double TP=NormalizeDouble (Price+100*Point, Digits);
#include <MASSIV.mqh> //объявление массива типа double (неповторяющиеся значения цены с пятью знаками после точки)double value = Bid ;//параметру value функции ArrayBsearch присваивается значение цены последнего тикаint S = ArrayBsearch( massiv, value, WHOLE_ARRAY, 0, MODE_ASCEND);//функция возвращает индекс значения цены макс. близкой к цене последнего тика if( (NormalizeDouble (Bid-massiv[S],Digits) <=0))//если разница между значением массива возвращенным на последнем тике и ценой последнего тика отрицательная или = 0.00000
{
OrderSend(Symbol(),OP_BUY,0.1,Ask,1,SL,TP,"jfh",123 );//ордер открыть
}
}
何度オートポイントを使っても、1回目からうまくいかない。
以下は、Init() です。
プログラムの任意の場所(この場合は実験のスタート地点でも)に置いています。
この関数はログに戻ります。
論理はどこにあるのか?
init()関数の段階で、金融商品のデータを読み込むことが保証されていないから です。
つまり、Init() を行わない場合の変数Pointの 値は、同じものを返すはずです...。
なぜ、関数が具体的にオブジェクト名を返すと無意味になるのでしょうか?
何度オートポイントを使っても、1回目はうまくいかない。
どこが論理的なんだ?
こんな風に試してみてください。
こんな感じでもなく、こんな感じでもなく。
Digitsは Piontと 同じように内部変数だからです。
これでうまくいくはずです :)
つまり、Init() を行わないPoint 変数の値も同じものが返ってくるはずなのですが...。
事実ではないのですが...。Pointは MQLプロセッサの内部変数であり、更新にはある程度の時間と初期化動作が必要です。これらすべては通常、プロセッサがstart()を呼び出す前にのみ発生し、init()の段階ではプロセッサの内部変数の値が設定されていない可能性があります。
"泣く "ということで
で、そのログがこちらです。
18:25:09 IndikatorZZ GBPJPY,Daily: F_CYF INIT: DownL = 0 UpL = 0
ひょっとして変数がint型じゃない?
私は何度かこのような自分を発見したことがあります。
もしかして変数がint型?
何度かそういう目に遭ったことがあります。
いいえ、ダブルです。intの何がいけないんでしょうね。
皆さん、ヒントをください。
私は、プログラムへのコメントに書かれているような、簡単なアイデアを実現しようとしているのです。
プログラムは、コードで指定された価格と一致しない価格でTESTERに注文を開く。
例えば、この注文は0.86084という価格で始まり、配列の中で最も近い値は0.85375となります。
差は正ですが、コードは差が< 0.00000、すなわち負である場合に注文を開くように指定しています。
エラーの発生箇所をお知らせください。
ありがとうございます。