MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1179

 
Mikhail:

こんなクエリーを作ると

こんな結果が出ます。

2020.06.17 13:49:53.270 2020.01.02 06:50:00 Symbol EURUSD_i Digits 5 Point 1e-05

このような要望を出すと

こんな結果が出ます。

2020.06.17 13:51:58.787 2020.01.02 06:45:00 Symbol EURUSD_i Digits 0 Point 0.0

同時に、Print関数を 挿入しない場合は、全くエラーが発生せず、オーダーが自分自身を修正しようともしないことに注意したいと思います。まるでCTradeが私の注文を見ていないかのようです。

記号やマジックナンバーのチェックがうまくいかない。

結果

2020.06.17 14:37:38.147 2020.01.02 06:50:00 シンボルマジック 0 チケット 2

マジックナンバーは12345、記号はユーロドルです。

なぜシンボルとメディックが手に入らないのですか?

文字列を変更した場合。

に変更されます。

で、マジックナンバーによるバリデーションを削除すると、価格に関する問題が発生します。

2020.06.17 01:38:24.136 2020.01.02 07:40:00 failed modify order #2 buy stop 0.1 EURUSD_i at 1.12086 sl: 1.12023 tp: 1.12275 -> 1.00000, sl: 1.00000 tp: 1.00000 [Invalid price] [無効な価格] を修正しました。

2020.06.17 01:38:24.136 2020.01.02 07:40:00 CTrade::OrderSend: modify #2 at 1.00000 (sl: 1.00000 tp: 1.00000) [invalid price].

2020.06.17 01:38:24.136 2020.01.02 07:40:00 BUY STOP modification failed!結果 Retcode: 10015, Retcodeの説明: 価格が無効です。

この同じコードが別のExpert Advisorでは問題なく動作するのに、私はすでに頭を悩ませています。

私は何を間違えているのだろう?

CSymbolInfo クラスのオブジェクトが正しく初期化されていない(またはされていない)。

この文字列がない場合は、asymbol.Name(Symbol())を追加してください。

もしあれば、Name(string symbol)関数で何が起こるかデバッグしてください。

Refresh()でm_digits等のフィールドを埋める。

s.s. あなたが追加したものから判断すると、あなたは間違いなくasymbolを初期化していませんね。

 
Mikhail:

新しいティックが到着するまでは、ボタンの動きはありません。それが目で見てわかるんです。価格が変わると同時に、ボタンが動きます。

今日、新しいティックでも、何も変えていないのに、ボタンが再描画されなくなりました。背景だけが動いている。

OnTickで座標を変更し、NEXT tickでボタンが動くと主張されているようですが、実際はどうなのでしょうか?座標を変更したもの、それともクリスマスのもの?

 
Aleksey Mavrin:

CSymbolInfoクラスのオブジェクトが正しく初期化されていない(または全く初期化されていない)。

もし、そのような文字列がなければ、asymbol.Name(Symbol())を追加してください。

もしあれば、Name(string symbol)関数で何が起こるかをデバッグしてください。

Refresh()でm_digits等のフィールドを埋める。

s.s. あなたが追加したものから判断すると、あなたのasymbolは間違いなく初期化されていないようです。

私のコードの一番上に、次のような行があります。
#include <Trade\Trade.mqh>
#include <Trade\OrderInfo.mqh>
#include <Trade\PositionInfo.mqh>
#include <Trade\DealInfo.mqh>
#include <Trade\SymbolInfo.mqh>

CTrade atrade;
COrderInfo aorder;
CPositionInfo apos;
CDealInfo adeal;
CSymbolInfo asymbol;

初期化なのでしょうか?コンパイル時に以下のような情報が得られます。

'Trade.mq5 panel' Trade.mq5 panel 1 1

'Trade.mqh' Trade.mqh 1 1

'Object.mqh' Object.mqh 1 1

'StdLibErr.mqh' StdLibErr.mqh 1 1

'OrderInfo.mqh' OrderInfo.mqh 1 1

'HistoryOrderInfo.mqh' HistoryOrderInfo.mqh 1 1

'PositionInfo.mqh' PositionInfo.mqh 1 1

'DealInfo.mqh' DealInfo.mqh 1 1

'SymbolInfo.mqh' SymbolInfo.mqh 1 1

生成されたコード 1 1

エラー0件、警告0件、経過時間3192msec 1 1

買い逆指値注文を出した後、すべての注文を再計算し、未決済の注文を選択し、シンボルとMajdic番号が一致するかどうかをチェックします。

for(int i=OrdersTotal()-1;i>=0;i--)
          if(aorder.SelectByIndex(i))  
              if(aorder.Symbol()==asymbol.Name() && aorder.Magic()==MagicNumber && Ask < aorder.PriceOpen())

この段階では何も起こりません。上に書いたように asymbol.Name() はなぜかオープンオーダーのシンボルを返さず、 aorder.Magic() は値0を返し(私のマジックナンバーは121345ですが)、 asymbol.TickSize() は値0を返します。つまり、チェックに失敗したため、それ以降の注文の処理は停止する。デバッグ in function Name(string symbol) what's going on "というフレーズがよく わからないのですが、明確にしてください。何をどこに加えればいいのでしょうか?

 
Aleksey Mavrin:

OnTickで座標を変更し、NEXT tickでボタンが動くと主張されているようですが、実際はどうなのでしょうか?座標を変更したもの、それともクリスマスのもの?

新しいティックが入る→パネルの座標を変更する→パネルの背景が希望の位置に移動し始める→その時ボタンは静止している→新しいティックが入る→ボタンがパネルに沿って希望の位置に移動する、という順序になると思います。Nativityからすぐにティックを発生させることは可能でしょうか?
 
Mikhail:

この段階では何も起こりません。すでに上に書いたように、関数 asymbol.Name() はなぜかオープンオーダーのシンボルを返さず、関数 aorder.Magic() は値 0 を返し(私のマジックは 121345 ですが)、関数 asymbol.TickSize() は値 0 を返すからです。つまり、チェックに失敗したため、それ以降の注文の処理は停止する。デバッグ in function Name(string symbol) what's going on "というフレーズがよく わからないのですが、明確にしてください。何をどこに加えればいいのでしょうか?

オーダー インデックス/チケットの エラーは、マジック0で判断したエラーかもしれません。 オーダー構造体にアクセスした瞬間に、間違った順番のデータが書き込まれます。選択ループの中で、次の番号が最後の オーダーセットに配置され、必要な番号でない場合があります。オーダー構造体から、最後に選択されたオーダーのデータが返される。

 
Mikhail:
私のコードの一番上にある行は

これは初期化なのでしょうか?コンパイルすると、以下のような情報が得られます。

'Trade panel.mq5' Trade panel.mq5 1 1

'Trade.mqh' Trade.mqh 1 1

'Object.mqh' Object.mqh 1 1

'StdLibErr.mqh' StdLibErr.mqh 1 1

'OrderInfo.mqh' OrderInfo.mqh 1 1

'HistoryOrderInfo.mqh' HistoryOrderInfo.mqh 1 1

'PositionInfo.mqh' PositionInfo.mqh 1 1

'DealInfo.mqh' DealInfo.mqh 1 1

'SymbolInfo.mqh' SymbolInfo.mqh 1 1

生成されたコード 1 1

エラー0件、警告0件、経過時間3192msec 1 1

買い逆指値注文を出した後、すべての注文を再計算し、未決済の注文を選択して、シンボルとmqh番号が一致するかどうかをチェックします。

この段階では何も起こりません。上に書いたように asymbol.Name() はなぜかオープンオーダーのシンボルを返さず、 aorder.Magic() は値0を返し(私のマジックナンバーは121345ですが)、 asymbol.TickSize() は値0を返します。つまり、チェックに失敗したため、それ以降の注文の処理は停止する。デバッグ in function Name(string symbol) what's going on "というフレーズがよく わからないのですが、明確にしてください。何をどこに加えればいいのでしょうか?

げっ、なんでよくわからないものを使うんだ(やたらとスーツケースだったらどうしよう))。)

そして、あなたは書かれていることを読もうともしない

asymbol.Name(Symbol())がない場合は、追加してください。

s.w. 初期化についてもっと説明したかったのですが、それも無駄だったようです。
 
Valeriy Yastremskiy:

マジック0によるオーダー インデックス/チケットに 誤りがある可能性があります。 オーダー構造を参照した時点で、誤ったオーダーのデータが格納されます。選択サイクルでは、最後の オーダーセットに次の番号が配置されるかもしれませんが、必要な番号ではありません。オーダー構造体から、最後に選択されたオーダーのデータが返される。

なぜこのような不具合が起こるのか、まだ解明できていません。最後に、ボタン付きのパネルを作成するためのコードを取り出し、これと同じコードが正常に動作しているEAで書き直したところ、すべてがうまくいきました。とにかく、ありがとうございました
 

こんにちは。

簡単な問題を解決するのを手伝ってください。

隙間カウンター。10ポイント以上のギャップをカウントしたい。

int start()
{
int gap=0;
int r=MathAbs(Close[2]-Open[1])/Point;
if (r>=10)
{
gap=gap+1;
}
Comment("ГЭП!========: ",gap,"\n",
        "ВЕЛИЧИНА ГЭПА==: ",r,"\n");
return(0);

変数 "gap "はゼロにリセットされる。その理由がわからない。もう全部試しました。ループやスタティックも試しましたが、うまくいきません。ループの書き方が間違っていたのでは?

 
Alexey Belyakov:

こんにちは。

簡単な問題を解決するのを手伝ってください。

隙間カウンター。10ポイント以上のギャップをカウントしたい。

変数 "gap "はゼロにリセットされる。その理由がわからない。もう全部試しました。ループやスタティックも試しましたが、うまくいきません。ループの書き方が間違っていたのでは?

変数gapは関数startのスコープ内にあり、新しいtickごとにゼロで再初期化されます。

 
Alexey Belyakov:

こんにちは。

簡単な問題を解決するのを手伝ってください。

隙間カウンター。10ポイント以上のギャップをカウントしたい。

変数 "gap "はゼロにリセットされる。その理由がわからない。もう全部試しました。ループやスタティックも試しましたが、うまくいきません。ループの書き方が間違っていたのでは?

int gap=0;
int start()
{
int r=MathAbs(Close[2]-Open[1])/Point;
if (r>=10)
{
gap++;
}
Comment("ГЭП!========: ",gap,"\n",
        "ВЕЛИЧИНА ГЭПА==: ",r,"\n");
return(0);
int start()
{
static int gap=0;
int r=MathAbs(Close[2]-Open[1])/Point;
if (r>=10)
{
gap=gap+1;
}
Comment("ГЭП!========: ",gap,"\n",
        "ВЕЛИЧИНА ГЭПА==: ",r,"\n");
return(0);