エラー、バグ、質問 - ページ 106

 
Rosh:

これは、SymbolNameに書いて あるように、MarketWatchにない文字が対象になっているのでしょう。

予期せぬ結果を得たシンボル名を出力し、MarketWatchのリストと比較します。
すべてのシンボルはMarketWatchに存在し、特に、#AAタイプの商品に対してはゼロを返すので、私は特にスクリプトにfalseを入れました。
string symbol=SymbolName(i,false);
MarketWatchウィンドウにシンボルがない場合、関数
if(SymbolInfoTick(symbol,last_tick))
がエラー 4302 を返した場合、この関数の正常な動作のためにシンボルが MarketWatch ウィンドウに存在しなければならないことが、ヘルプに明記されていないためです。
 
sergey1294:
...この機能を正常に動作させるためには、MarketWatchウィンドウにツールが表示されている必要があることは、ヘルプに記載されていません。

ヘルプは本当に普通の例とボトルネックで人員を配置する必要があります。

追記

また、言語を変更した後に、ベースのEAが動かなくなる(あるいはコンパイルエラーが発生する)という事態もよくあります。

 

今日気づいたのですが...MT5(access.metatrader5.com:443)

EURJPY、日足です。

例えばGBPJPY、日足:ここではすべて順調です。

そして、こちらはEURJPY、あるMT4 DCのDailyのスクリーンショットです。

その差は肉眼でもわかる...。

これはどうしたら直るのでしょうか?

 
Rosh:

これはおそらく、MarketWatchに存在しないシンボルを対象にしているのだと思いますが、SymbolNameについては、こう書かれています。

予期せぬ結果を得たシンボル名を出力し、MarketWatchのリストと比較します。

MarketWatch に存在しないシンボルについては、SymbolInfoTick() はエラーERR_MARKET_SELECT_ERROR "Symbol not selected in MarketWatch" (コード 4302 ) を返しました。MarketWatchでは、EURUSDとGBPUSDのみ選択されています。初歩的な実行では、SymbolInfoTick()は選択されていないシンボルに対してエラー ERR_MARKET_SELECT_ERRORを 返すことが示されています

IS      0       1 (EURUSD,M15)  01:53:21        ************************************************
MF      0       1 (EURUSD,M15)  01:53:21        Инструмент - EURUSD
RR      0       1 (EURUSD,M15)  01:53:21        Валюта депозита = USD
RG      0       1 (EURUSD,M15)  01:53:21        Базовая валюта = EUR
QM      0       1 (EURUSD,M15)  01:53:21        Валюта маржи = EUR
CH      0       1 (EURUSD,M15)  01:53:21        Маржа для покупки = 1271.23
QG      0       1 (EURUSD,M15)  01:53:21        Маржа для продажи = 1271.05
CQ      0       1 (EURUSD,M15)  01:53:21        ************************************************
JQ      0       1 (EURUSD,M15)  01:53:21        Инструмент - GBPUSD
HQ      0       1 (EURUSD,M15)  01:53:21        Валюта депозита = USD
EH      0       1 (EURUSD,M15)  01:53:21        Базовая валюта = GBP
RN      0       1 (EURUSD,M15)  01:53:21        Валюта маржи = GBP
MI      0       1 (EURUSD,M15)  01:53:21        Маржа для покупки = 1553.53
DP      0       1 (EURUSD,M15)  01:53:21        Маржа для продажи = 1553.25
MG      0       1 (EURUSD,M15)  01:53:21        ************************************************
LR      0       1 (EURUSD,M15)  01:53:21        Инструмент - USDCHF
NG      0       1 (EURUSD,M15)  01:53:21        Валюта депозита = USD
NJ      0       1 (EURUSD,M15)  01:53:21        Базовая валюта = USD
EQ      0       1 (EURUSD,M15)  01:53:21        Валюта маржи = USD
RI      0       1 (EURUSD,M15)  01:53:21        SymbolInfoTick() failed, error = 4302
GL      0       1 (EURUSD,M15)  01:53:21        ************************************************
PE      0       1 (EURUSD,M15)  01:53:21        Инструмент - USDJPY
DL      0       1 (EURUSD,M15)  01:53:21        Валюта депозита = USD
DF      0       1 (EURUSD,M15)  01:53:21        Базовая валюта = USD
OL      0       1 (EURUSD,M15)  01:53:21        Валюта маржи = USD
HL      0       1 (EURUSD,M15)  01:53:21        SymbolInfoTick() failed, error = 4302
QH      0       1 (EURUSD,M15)  01:53:21        ************************************************

...

ところで、 sergey1294さんのログの最後のデータブロックは、他のものと異なっています。まず、SymbolInfoTick()は今回も同じエラーコードを返していますし、次に、-このデータブロックでは、商品、基準通貨、証拠金通貨が何か奇妙な名前になっていると思いませんか?

これはバグなのでしょうか?このおかしさに全く気づかなかったのでしょうか?

CE      0       OrderCalcMargin (EURUSD,M1)     20:44:27        ************************************************
IG      0       OrderCalcMargin (EURUSD,M1)     20:44:27        Инструмент - 
LS      0       OrderCalcMargin (EURUSD,M1)     20:44:27        Валюта депозита = USD
DD      0       OrderCalcMargin (EURUSD,M1)     20:44:27        Базовая валюта = 
CL      0       OrderCalcMargin (EURUSD,M1)     20:44:27        Валюта маржи = 
RG      0       OrderCalcMargin (EURUSD,M1)     20:44:27        SymbolInfoTick() failed, error = 4302
 
最後のデータブロックについては、これはループのちょっとした不具合で、最後のデータクエリで存在しない商品にアクセスしたため、入金通貨 以外のすべてのフィールドが空になっています。
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете - Документация по MQL5
 
sergey1294:
最後のデータブロックについては、ブルートフォースループが少し不具合を起こし、最後のデータクエリで存在しないシンボルにアクセスしたため、預金通貨 以外のすべてのフィールドが空になっています。

どうですか?つまり、ログは与えられたコードのバージョンのものではないのですね。

コードから判断すると、そこそこ問題ない。

あるいは、SymbolsTotal()は1つの値を返しますが、スクリプトの実行中、サイクルの途中のどこかで、ひどい事故によって、サーバー部分を設定するブローカーが、利用可能なシンボルを1つ削除し、SymbolsTotal()は-スクリプトが要求すれば-新しい値を返し、ひとつ少なくなりますが、ループ終了条件は、変数 Total に格納された古い値に基づいているので、今は存在しないシンボルにアクセスする最後の反復で、該当関数は空のラインを返すのでしょうか。:)

これまでは、これを実現するために、このシナリオしか出てきませんでした。:)

 
どうしてそうなったかわからないが、まだ起きてはいない
 
simpleton:

...そして,計算された値は明示的にulongに変換されます.正確にulongに、キャストされる値が非負であることが保証 されているからです。

整数型にキャストされる際、実数型の小数部は破棄される。四捨五入ではなく、端数を切り捨てることで、最大ロットの価値を増加させない ことを保証しているのであり、フリーマージンが可能なのである。それこそが、私たちに必要なことなのです。

Simpleton さん、私も似たような方法をとりましたが、int型への明示的な変換を使いました。最大可能ロットは、ブローカーやディーラーによって、あるいは自己資金の大きさ によって制限されると想定していました。だから、intを使えば十分なはずです。この方法(intを使った "下から "の丸め方)に落とし穴はないでしょうか?
 

デベロッパー

スクリプトにパラメータを表示させるにはどうしたらいいでしょうか(新しい条件のために常にコードを変更するのは億劫なので)......?

 
Interesting:

デベロッパー

スクリプトにパラメータを表示させるにはどうしたらいいでしょうか(新しい条件のために常にコードを変更するのは億劫なので)......?


#property script_show_inputs