[ARCHIVE]フォーラムを乱立させないために、どんなルーキーの質問でも。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 5. - ページ 233

 
hoz:

何度オートポイントを使っても、1回目からうまくいかない。

以下は、Init() です。

プログラムの任意の場所(この場合は実験のスタート地点でも)に置いています。

この関数はログに戻ります。

論理はどこにあるのか?

VladislavVGによると、init()関数では、金融商品のデータを読み込むことが保証されて いないからです。
 
GaNDarM:
init()関数の段階で、金融商品のデータを読み込むことが保証されていないから です。

つまり、Init() を行わない場合の変数Pointの 値は、同じものを返すはずです...。
 
hoz:
なぜ、関数が具体的にオブジェクト名を返すと無意味になるのでしょうか?
そして、この機能がいつでもどこでも正しく動作し、どこかでグリッチしたり、トリッキーなオブジェクト名で詰まったり、あなた自身が誤って存在しないオブジェクトの番号を突然滑り込ませたりしないことを100%確信しているのでしょうか?また、関数から返される結果で、正しく動作したかどうかを判断することはできません。これは、ドキュメントに書いてあることです。正しい方法は、エラーコードを 取得し、それを回避することだけです。これは、自分(あるいは他人)の不手際から自分を守る方法です。
 
hoz:

何度オートポイントを使っても、1回目はうまくいかない。


どこが論理的なんだ?

こんな風に試してみてください。

int init()
{
   if (Digits == 2 || Digits == 4)
     pt = MarketInfo(Symbol(), MODE_POINT);
   if (Digits == 1 || Digits == 3 || Digits == 5)
     pt = MarketInfo(Symbol(), MODE_POINT) * 10;
 
  return (0);
}

こんな感じでもなく、こんな感じでもなく。

int init()
{
   int MyDigits = MarketInfo(Symbol(), MODE_DIGITS)
   if (MyDigits == 2 || MyDigits == 4)
     pt = MarketInfo(Symbol(), MODE_POINT);
   if (MyDigits == 1 || MyDigits == 3 || MyDigits == 5)
     pt = MarketInfo(Symbol(), MODE_POINT) * 10;
 
  return (0);
}

Digitsは Piontと 同じように内部変数だからです。

これでうまくいくはずです :)



 
hoz:

つまり、Init() を行わないPoint 変数の値も同じものが返ってくるはずなのですが...。

事実ではないのですが...。Pointは MQLプロセッサの内部変数であり、更新にはある程度の時間と初期化動作が必要です。これらすべては通常、プロセッサがstart()を呼び出す前にのみ発生し、init()の段階ではプロセッサの内部変数の値が設定されていない可能性があります。
 
GaNDarM:


"泣く "ということで

で、そのログがこちらです。

18:25:09 IndikatorZZ GBPJPY,Daily: F_CYF INIT: DownL = 0 UpL = 0


ひょっとして変数がint型じゃない?


私は何度かこのような自分を発見したことがあります。

 
ilunga:

もしかして変数がint型?


何度かそういう目に遭ったことがあります。


いいえ、ダブルです。intの何がいけないんでしょうね。
 
こんにちは!前日にある事態が発生しました。2013年3月19日17時頃、ストップ売りの注文を出しました。建値は1.2903、ストップロス 1.2913、トレーリングストップ15ピップス、M15、ロット-0.5でした。口座履歴にあるように、17-49でポジションを開設しています。ポジションはGMTで再び21:15に利益マイナス90で決済されました。歴史を見たとき、いろいろな疑問が湧いてきたんです。例えば、スパイクの頂点でポジションがクローズされた理由(写真参照)。トレーリングストップが作動しなかった理由は、それが機能すれば、値動きが正しいため、利益がプラスになるからです。 トレーリングストップの後、ストップロスは90米ドルではありません。そしてまた - なぜポジションが上昇の頂点でクローズされたのか。点から面へ。この件に関しては、ディーリングセンターへの問い合わせはしていない。たぶん、答えないでしょう。このフォーラムを思い出し、プロの方々がこの異常の原因をわかりやすく説明してくれることを期待しています。私は少し前にMT4で取引を始めました。今も匂いを嗅ぎながら周りを見回しています。
 
こんにちは。1つのEAを複数のウィンドウの通貨ペアに同時に貼り付けた場合、あるウィンドウのEAの変更が別のウィンドウのEAに影響を与えるかどうかを教えてください? つまり、ローカル変数が 変化するかどうか?
 

皆さん、ヒントをください。

私は、プログラムへのコメントに書かれているような、簡単なアイデアを実現しようとしているのです。

プログラムは、コードで指定された価格と一致しない価格でTESTERに注文を開く。

例えば、この注文は0.86084という価格で始まり、配列の中で最も近い値は0.85375となります。

差は正ですが、コードは差が< 0.00000、すなわち負である場合に注文を開くように指定しています。


エラーの発生箇所をお知らせください。

ありがとうございます。

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 );//ордер открыть
  }                                  

   }