mql4言語の特徴、微妙なニュアンスとテクニック - ページ 19

 

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

ライブラリ: エキスパート

fxsaber さん 2019.06.04 16:40

// MT4-советник показывает, в каком режиме Long/Short был запущен.

#include <fxsaber\Expert.mqh> // https://www.mql5.com/ru/code/19003

int GetLongShortFlag( const int Chart_ID = 0 )
{
  MqlParam Params[];
  string Names[];
  
  const int Res = EXPERT::Parameters(Chart_ID, Params, Names);
  
  return(((Res & 3) << 1) + (Res & 1));
}

string LongShortToString( const int Chart_ID = 0 )
{
  const int Flag = GetLongShortFlag(Chart_ID);
  string Str = NULL;
  
  if ((bool)(Flag & SYMBOL_TRADE_MODE_LONGONLY) && (bool)(Flag & SYMBOL_TRADE_MODE_SHORTONLY))
    Str = "Long & Short";
  else if ((bool)(Flag & SYMBOL_TRADE_MODE_LONGONLY))
    Str = "Only Long";
  else if ((bool)(Flag & SYMBOL_TRADE_MODE_SHORTONLY))
    Str = "Only Short";
    
  return(Str);
}

int OnInit()
{
  Alert(LongShortToString());
  
  return(INIT_FAILED);
}


代替

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

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

fxsaber, 2019.06.04 19:40

string LongShortToString2()
{
  string Str = "Long & Short";

  if (OrderSend(_Symbol, OP_BUY, 1, 0, 0, 0, 0) && (GetLastError() == ERR_LONGS_NOT_ALLOWED))
    Str = "Only Short";
  else if (OrderSend(_Symbol, OP_SELL, 1, 0, 0, 0, 0) && (GetLastError() == ERR_SHORTS_NOT_ALLOWED))
    Str = "Only Long";
    
  return(Str);
}


いつもうまくいくとは限りませんが、多くの場合、それで十分です。

 
 

課題は、最小限の労力で、Market Watchからすべてのティックを(損失なく)保存することでした。

Loader-scriptを書き、各シンボルのチャートを開き、その上でindicator-collectorを実行します。

このようなtplファイル(全文)を読み込んでインジケータを実行するのが全体のトリックです。

<chart>
<window>
<indicator>
name=Custom Indicator
<expert>
name=HistoryTicks_OnlySave
</expert>
</indicator>
</window>
</chart>

バーがないからいいんです。したがって、それらに資源を費やすことはありません。

一日の終わりには、60枚のチャートがあります。指標は同量。~1分間に〜500Kbのティックが書き込まれます。

RAM ~450Mb、CPU ~3-8% (8 HyperThreading)です。


このようなことをしたい場合は、Market Watchのデータの変化頻度を把握するExpert Advisorを実行することを強くお勧めします。私のEAは3秒以上更新されないと、強制的に再ログインさせられてしまいます。MT4は(MT5も)ネットワークに問題がある場合、10~15秒、時には1分ほどで再ログインすることができます。その時だけ、再ログインそのものが行われます。その10~15秒、あるいは1分の間にティックを失わないために、再接続という作業を行うことをお勧めします。戦闘用TCを搭載した端末も同様です。

 
fxsaber:

最小限の労力で、Market Watchからすべてのティックを(損失なく)保存することに挑戦しています。

ロスレスですか?この神話はすでに払拭されている。

 
Andrey Khatimlianskii:

負けなし、ですか?その神話はすでに払拭されたと思います。

どうやって自分を納得させたのか、よく覚えていない。MT4で収集した履歴とブローカーでの履歴を比較したのはわかるのですが。100%一致しました。

QBのHistoryTicksというソリューションを使っています。仮想テスターの収集ティックでの結果とMT5テスターのダウンロードしたティックでの結果を比較したところ、100%一致しました。

問題は、接続性によるものとしか考えられません。エキスパート・アドバイザーは、もちろん外れる。指標はそうではありません。

 
fxsaber:

どうやって自分を納得させたのか、よく覚えていない。MT4で収集した履歴とブローカーでの履歴を比較したのはわかるのですが。100%一致したのです。

QBのHistoryTicksというソリューションを使っています。収集したティックでの仮想テスターの結果とダウンロードしたティックでのMT5テスターの結果を比較したところ、100%一致しました。

問題は、接続性によるものとしか考えられません。エキスパート・アドバイザーは、もちろん外れる。指標はそうではありません。

エヘン、あなたの露出の話をしてたんです。

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

エラー、バグ、質問

fxsaber さん 2018.02.26 09:05

3 つのティックのパックが来た場合、Calculate イベントは 3 回呼び出されますが、SymbolInfoTick はその 3 回の呼び出しのそれぞれで最新のティックを返します。つまり、インジケータを通さない、いわゆるティックの収集は、控えめに言っても疑問が残るのです。


何かが変わったのでしょうか?

 
Andrey Khatimlianskii:

エヘン、あなたの露出の話をしてたんです。

何か変わったことはありますか?

CopyTicksをいじっているときに、ティック収集とCopyTicksの結果の比較がありました。

正確には覚えていないが、マッチングがあったのだと思う。

CustomTicksAddでティックを一括追加して見る必要がある。でも、MT5なんです。


MT4の場合はこのように確認することができます。隣り合う2つの記録されたティックは、必ず異なるはずです。そして、サーバー上のバーのティックボリュームは、収集されたティックのバーと一致する必要があります。

2018年の私は、何か賢い方法を知っていたのでしょう。今は思い出せない。

 
fxsaber:

どうやって自分を納得させたのか、よく覚えていない。 MT4で収集した履歴とブローカーでの履歴を比較したのはわかるのですが。100%一致したのです。

QBのHistoryTicksというソリューションを使っています。収集したティックでの仮想テスターの結果とダウンロードしたティックでのMT5テスターの結果を比較したところ、100%一致しました。

問題は、接続性によるものとしか考えられません。エキスパート・アドバイザーは、もちろん外れる。指標はそうではありません。

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

ティックヒストリーを収集するためのアドバイザーを与える

ゼンツ 2018.03.07 11:10

9月に比較をしたんです。アルパリ・アーカイブは1週間の発行遅延があるので、今の比較をすると来週までに手に入らない(あまり意味がないと思うし、もう自分でわかったことなので)。

そこで、2017.09.22のスクリーンショットを2枚ご紹介します。ターミナルは、ログを書き込むインジケータだけで、空のコンピュータで動作していた。 OSはXP SP3、端末のバージョンはMT4 build 1090です。Alpari Pro-ECNリアル口座。



左はアルパリ・アーカイブの写真、右はインジケーターが記録した刻みです。

ここで、17秒前と後(16秒と18秒)の刻みが完全に一致していること、すなわちこの場合、時間の非同期化が起こっていないことに気づくかもしれません。繰り返すが、1秒以内に刻みが飛ぶのは、つまり速い刻みだけでなく、「遅い」刻みも飲み込まれるのである。体系的なものは見つかっていません。

解説:アルパリのアーカイブの秒の後のポイントの右側は、マイルでもマイクロ秒でもなく、刻み数になっています(何らかの理由でそうなっています)。

そのスレッドへのリンクはこちらです: https://www.mql5.com/ru/forum/229889/page4#comment_6741502 もう確認していませんが、MT4ではインジケータもEAもティックを見逃すと推測されますが、その後何も変わっていないように思います。

Дайте советник для сбора тиковой истории
Дайте советник для сбора тиковой истории
  • 2018.03.07
  • www.mql5.com
Дайте готовый советник для записи тиков в csv файл...
 
zenz:

そのスレッドへのリンクはこちらです。https://www.mql5.com/ru/forum/229889/page4#comment_6741502。 もう確認していませんが、MT4ではインジケータもEAもティックを見逃すと推測されますが、その後何も変わっていないように思います。

トレードサーバー側では、この「ミス」したティックが送信されたという確証はない。

 
fxsaber:

トレードサーバー側では、これらの「ミス」ティックが送信されたかどうか、確実ではありません。

私も思案していたのですが、同感です。ただ、その時はいろいろと調べていて、その矛盾が単発ではなく、繰り返し起こることがわかったので、そのままにしておきました。

理由: