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

 
Vitaly Muzichenko #:

アイテムのコストを考慮する必要があります

私はあなたにコードを与えることができますが、それを理解するのに長い時間がかかります、それは大きいです、また、マージンの最大可能ロットを考慮します。

出来なければ質問します)))もちろん、ポイント値を考慮する必要がありますし、計算式も2段階式ではありません。用語を完全に理解していないと難しいし、前提条件の正しさを検証するのも時間がかかる)))契約の価値 = 貨幣日の1ロットの価値を計算))))

 

こんにちは、定数のリストからテキスト形式で値を返す方法をご教示ください。

例えば、HistoryDealGetInteger関数は、イベントの要求時にENUM_DEAL_TYPE リストの中からint値を返します。返された番号から、「DEAL_TYPE_CREDIT - クレジット発生」であるという情報を得るにはどうしたらよいですか。しかし、デバッグ中は、この関数が返す3や5という数字が何を意味するのかが全く分かりません。

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства сделок
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства сделок
  • www.mql5.com
Свойства сделок - Торговые константы - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Кирилл Якимов #:

こんにちは、定数のリストからテキストとして値を返す方法を教えてください。

例えば、HistoryDealGetInteger関数は、イベントの要求時にENUM_DEAL_TYPE リストの中からint値を返します。返された番号から、「DEAL_TYPE_CREDIT - クレジット発生」であるという情報を得るにはどうしたらよいですか。しかし、デバッグ中は、この関数が返す3や5という数字が何を意味するのかが全く分かりません。

string s = EnumToString((ENUM_DEAL_TYPE) x)

 
Maxim Kuznetsov #:

string s = EnumToString((ENUM_DEAL_TYPE) x)

ありがとうございました、助かりました。
 



1) 履歴をロードしていません。オンライン処理中にチャートウィンドウで、70 000分のバーをロードする時間がありました。Expert AdvisorをStrategy Testerに 読み込ませていますが、あるパターンに対して最小限のバー数を書き込んだだけで、「分析のためのバー数が不足しています」と回答されます。iBarsを 印刷すると、1200本と表示される。履歴を読み込んだ(8 000 000バー)。再起動したところ、ウィンドウと履歴に「99999999」のバーが表示されました。ノヴァは「歴史が足りない」と書いている。iBarsを印刷すると、また1200。これは何ですか、そしてどのように解決しますか?

2) 多通貨分析において、現在のチャートで突然相場が凍結され、OnTickがチェックを呼び出さない場合、他の通貨ペアの新しい着信ティックを見逃さないようにインジケータを強制するにはどうすればよいですか?OnTimerを試しましたが、テスターではうまくいきません

 
このスクリプトでは、インデックス方向が 異なる動的配列のサイズ変更を試しています。配列のサイズを大きくすると、新しいセルがどちら側に現れるかを理解するためです。
void OnStart()
  {
   
   int a[], b[], size = 5, new_size = size + 5;
   
   if( ArraySize( a ) != size )
     ArrayResize( a, size, 0 );
   
   if( ArraySize( b ) != size )
     ArrayResize( b, size, 0 );
   
   if( ArrayGetAsSeries( a ) )
     ArraySetAsSeries( a, false );
   
   if( !ArrayGetAsSeries( b ) )
     ArraySetAsSeries( b, true );
   
   for( int i = 0; i < size; i++ )
     {
      a[i] = i;
      b[i] = i;
     };
   
   ArrayResize( a, new_size, 0 );
   ArrayResize( b, new_size, 0 );
   
   for( int i = 0; i < new_size; i++ )
     {
      Alert( "a", i, " ", a[i] );
      Alert( "b", i, " ", b[i] );
      Alert(" ");
     };
   
  }

そして、その結果がこちらです。


配列 b[] (逆インデックスを持つ) は、サイズ

を大きくすると、なぜか値が重複してしまうことが判明しました。何か見落としがあるのか、それとも何かの間違いなのか?
 
Alexandr Sokolov インデックスの方向が 異なる動的配列のサイズを変更する実験をしています。 そして、この結果が出ました。 配列 b[] (reverse indexing) はサイズを大きくすると何らかの形で値が重複することが分かりました。 なぜでしょうか?何か見落としがあるのか、それとも何かの間違いなのか?






いずれにせよ、新しい配列のセルの値は当てになりません。これらは初期化されていない変数であり、どんなゴミが含まれていてもおかしくないからです。

 
Alexandr Sokolov インデックスの方向が 異なる動的配列のサイズを変更する実験を行っています。 その結果がこれです。 (リバースインデックスの)配列 b[] はサイズを大きくすると何らかの形で値が重複することがわかりました。 なぜでしょうか?何か見落としがあるのか、それとも何かの間違いなのか?






配列が埋まった後に反転させる必要があります。

 
JRandomTrader #:

いずれにせよ、新しい配列のセルの値は当てになりません。これらは初期化されていない変数なので、どんなゴミが含まれていてもおかしくないからです。


1) ミラーリングは、私の例のように5つのサイズだけでなく、他のサイズでも観察される
2) もし配列にリバースインデックスがあれば、新しいセルは配列の最初に現れるはずだが、そうではな い。

 
Alexey Viktorov #:

アレイを埋めた後、反転させる必要があります。

私もそのように考えました。少なくとも、今のところ他の解決策は見当たりません。