FOREXにおけるシンボル名の最大長 - ページ 8

 
fxsaber:

実は、打ち込みです。トレードの追従を待たないことが可能であるため。唯一の非代替のonTradeTransactionは、注文が拒否された場合である。例えば、お金が足りない場合。


その結果、配列(リスト)に適切な魔導師とリクエスタを詰め込む非同期トランザクションを100回行ったことが判明しました。OnTradeTransaction がクエストのレスポンスを受信すると同時に、リストから要素を削除した。生者・死者のリストからメジャーがハイライトされるのを確認したら、すぐにそのエントリーを削除しました。そうやって多かれ少なかれ、コントロールは実現されているのです。正しく理解できましたか?


マジックではなく、他のフィールド - SL/TP、Comment - を使用することは可能です。

はい、まさにその通りです。OnTradeTransactionが 無効になることはなく、チェック関数が定期的に呼び出されるだけです(OnTradeTransactionがトリガーされない場合)。注文がすべて検出されると、すぐにフラグがリセットされます。

コメントをSL/TPとして使用するにはどうすればよいですか?

 
fxsaber:

すべてのオンストリームで確認できるのに、なぜ待つ必要があるのでしょうか?

なぜなら、私の戦略では、OnTradeTransactionで 何が来たかが重要だからです。

On-pukeは使っていません :)

追加

イベントがOnTradeTransaction で発生した場合、すべてがリセットされるため、支障は ありません。

 
prostotrader:

解説のroyatnoですが、SL/TPとして使うにはどうしたらいいでしょうか?

上記補足...

偽のSLを設定し、その値には必要な情報が格納される。例えば、MT4でリミッター経由で取得したポジションの始 値を保存する方法ですね。

 
prostotrader:

なぜなら、私の戦略では、OnTradeTransactionで 何が起こったかが重要だからです。

そのため、OnTradeTransactionで直接マジックを確認するようにしてください。私ならそのようにします。


一般的に、リクエスチョンに代わるメギクという考え方はクールだと思います

 
fxsaber:

上記補足...

偽のSLを設定し、その値には必要な情報が格納されている。例えば、MT4でリミッターを通したポジションの始 値を保存していたのはそのためです。

ポジションがないときにSLを設定することは可能ですか?

 
prostotrader:

ポジションがない場合、SLを露出させることは可能でしょうか?

マークダウンについては、できない場合があります。私は以前から指値注文のみで取引しています。

 
fxsaber:

市場向けにはできないかもしれません。これまで長い間、私は指値注文だけで取引をしてきました。

"そんな情報を保存しておくなんて、ちょっとおかしい。まあ、そうなんですけどね、わかってくださいよ。

FOREX市場は 全く興味がないので、1つのチャートにシンボル名6つ、タグ65365個で十分すぎるほどです。

しかも、1日あたり2000件しか取引できない。

 
prostotrader:

FOREX市場は 全く興味がないので、1つのチャートにシンボル名6文字と65365モギクがあれば、私のニーズには十分すぎるほどです。

しかも、1日にできる取引は2000回まで。

FXのことではないんです。また、OnTradeTransactionについても同じ問題があります。したがって、普遍的な解決策

#include <crc64.mqh> // https://www.mql5.com/en/blogs/post/683577

string GetMagicString()
{
  return(MQLInfoString(MQL_PROGRAM_PATH/*MQL_PROGRAM_NAME*/) + _Symbol + (string)ChartID()/* + (string)_Period*/);
}

// Формирует мэджик с изменяемой частью ReserveBits для прописывания туда Num-значения
ulong GetMagic( const int Num = 0, const int ReserveBits = 12 )
{
  uchar Bytes[];
  
  return((crc64(0, Bytes, (StringToCharArray(GetMagicString(), Bytes))) << ReserveBits) + (Num % (1 << ReserveBits)));
}

// Определяет, свой ли исходный мэджик с изменяемой частью ReserveBits
bool IsMyMagic( const ulong Magic, const int ReserveBits = 12 )
{
  return(GetMagic(0, ReserveBits) >> ReserveBits == Magic >> ReserveBits);
}

#define  PRINT(A) Print(#A + " = " + (string)(A))

void OnStart()
{  
  for (int i = 0; i < 10; i++)
  {
    PRINT(GetMagic(i));
    PRINT(IsMyMagic(GetMagic(i)));
  }
  
  PRINT(IsMyMagic(MathRand()));
}
 

もちろん、この場合、イベントモデルは不都合である。例えば、On-functionを抜けることなくAsyncな操作を行い、結果を得たい場合。

今は、この動作を松葉づえで解除することが可能です。

  1. OnTradeTransaction を 使って、すべての取引を公共の場所(例えば、リソース)に書き込むインジケータ(バッファと入力変数なし)を書きます。
  2. Expert Advisorは、iCustomを通じてこのインジケータを作成します。
  3. エキスパートアドバイザーは、どの取引所でも、インジケータによって書き込まれたすべての受信トランザクションを見ることができます。

そのため、自由度が非常に高い。

例えば、100個のAsync命令を送信し、深いものから抜け出さずにその実行を待ち、コードの実行を継続することができるのです。


もちろん、リクエストの話です。それに、マジックというテーマは関係ないんです。


開発者が一般にアクセス可能な配列にトランザクションを書き込むことは理にかなっていますが。インジケーターなし。

 
fxsaber:

FXのことではないんです。また、OnTradeTransactionについても同じ問題があります。したがって、普遍的な解決策です。

ビット演算なしで、crc64+Numだけでも 可能(というか、むしろ良い)なのですが。
2018.08.25 22:10:48.913 Test (BR-9.18,M1)       1749671450686091264
2018.08.25 22:10:48.914 Test (BR-9.18,M1)       1749671450686091265
2018.08.25 22:10:48.914 Test (BR-9.18,M1)       1749671450686091264
2018.08.25 22:10:48.914 Test (BR-9.18,M1)       1749671450686091265
2018.08.25 22:10:48.914 Test (BR-9.18,M1)       1749671450686091264
2018.08.25 22:10:48.914 Test (BR-9.18,M1)       1749671450686091265
2018.08.25 22:10:48.914 Test (BR-9.18,M1)       1749671450686091264
2018.08.25 22:10:48.914 Test (BR-9.18,M1)       1749671450686091265
2018.08.25 22:10:48.914 Test (BR-9.18,M1)       1749671450686091272
2018.08.25 22:10:48.914 Test (BR-9.18,M1)       1749671450686091273

偶然の一致がある・・・。