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

 
Andrey Barinov:

型変換とその際の損失について https://www.mql5.com/ru/docs/basis/types/casting をお読みください。


ありがとうございました。このアイデアは、正確なシグナルをほとんど出さないインジケータがある、というものです。

任意の数のチャートを開き、MMとインジケーターのシグナルに従って、ポジションを建てる。チャート上にシンボルとオープンポジションの現在の利益を 示すテキストマークやボタンを作成します。ボタンをクリックすると、目的のチャートが前景に表示されます。

 
Metaquotes-DemoのFOREXクォートのソースは変更されましたか?スプレッドはかなり小さくなっています。
 
Slava:
4人組?

はい

 
を実行すると、コンパイルエラーではなく、おかしな挙動になります。
// Запускаем на MT5

#import "Temp.ex4" // EX4 - не ошибка
  void Func();
#import

void OnInit()
{
  Func();
}

ただのDLLじゃない、Temp.ex4でもない!

 
Vitaly Muzichenko:

はい

問題は、新しいMQL4では、文字列がユニコードであることです。他のすべての場所:オブジェクト、インジケータ、グラフ、シンボル名、ログ、設定など。- の場合、文字列はUnicodeのままです。そのため、MQL4のプログラムで「外の世界」と通信する場合、毎回WideCharToMultiByte変換が行われます。通常、文字列の文字は1バイト(ただしエンコーディングによって異なる)だが、東南アジアではマルチバイト(中国語のレイアウトでは1文字が1〜4バイトになる)である。

そのため、中国人だけでなく、ヨーロッパの人々も1251のコードページを理解することはできないだろう。

 
Slava:

問題は、新しいMQL4では、文字列がユニコードであることです。他のすべての場所:オブジェクト、インジケータ、グラフ、シンボル名、ログ、設定など。- の場合、文字列はUnicodeのままです。そのため、MQL4のプログラムで「外の世界」と通信する場合、毎回WideCharToMultiByte変換が行われます。通常、文字列の文字は1バイト(ただしエンコーディングによって異なる)であるが、東南アジアではマルチバイト(中国語のレイアウトでは1文字が1〜4バイトになる)である。

だから、中国人だけでなく、ヨーロッパの人々も1251のコードページを理解することはできないだろう。

キリル文字の名前を持つオブジェクトを作成し、クリックするとOnChartEventで それを処理しますが、そこではその名前は表示されません。

ここが問題にならないか、今日5日に確認します。

 
Vitaly Muzichenko:

ここで問題なのは、キリル文字の名前を持つオブジェクトを作成し、クリック時にそれをOnChartEventで 処理しますが、そこにその名前が表示されないことです。

今日は、ここが問題にならないか、FIVEでチェックします。

Fiverでも使えるようになる。

そして、あなたのケースを解決するソリューションがクオータナリーにはあります。

OnInitでMQLSetInteger(MQL_CODEPAGE,CP_ACP)を呼び出します。

そうすれば、文字列の変換は「前後」でも十分です


MQLSetInteger - Проверка состояния - Справочник MQL4
MQLSetInteger - Проверка состояния - Справочник MQL4
  • docs.mql4.com
Функция MQLSetInteger() предназначена для изменения текущей кодовой страницы в запущенной mql4-программе. Это может понадобиться в тех случаях, когда для запускаемых mql4-программ терминал устанавливает по умолчанию кодовую страницу, отличающаяся от той, которая использовалась при её компиляции. Например, mql4-программа скомпилирована на...
 
このコードはEURUSD 30mで実行されます

#property indicator_chart_window
#property indicator_buffers 0
#property indicator_plots   0
ENUM_MA_METHOD     MA_Type   = MODE_SMA;
ENUM_APPLIED_PRICE MA_Price  = PRICE_CLOSE;
int handle;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{
   handle = iMA("AAPL",_Period, 10,0,MA_Type,MA_Price);

   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{

   return(rates_total);
}
//+------------------------------------------------------------------+


ターミナルはエラーを発生させます。
2017.10.11 14:35:23.352 1111111111111111111111 (EURUSD,M30) cannot load indicator 'Moving Average' [4302].

プリントアウトすると-1が発生する。

 
Money_Man:
何が間違っているのか、教えてください。

このコードはEURUSD 30m



terminalで実行するとエラーが発生します。
2017.10.11 14:35:23.352 1111111111111111111111 (EURUSD,M30) cannot load indicator 'Moving Average' [4302].



といった具合に。

   handle = iMA(Symbol(),Period(), 10,0,MA_Type,MA_Price);

?

 
Money_Man:
何が間違っているのか、教えてください。

このコードはEURUSD 30m



で実行すると、ターミナルでエラーが発生します。
2017.10.11 14:35:23.352 1111111111111111111111 (EURUSD,M30) cannot load indicator 'Moving Average' [4302].


エラー4302とはどういう意味ですか?