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

 
ヒストリーセレクト

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

MT5とスピードの関係

fxsaber, 2020.09.02 00:32

もし誰かがfrom-inputパラメータが一致しない共有ライブラリを使おうとすると、スローが発生します。


もう一つのHistorySelect。

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

MT5とスピードの関係

fxsaber, 2020.09.02 00:52

HistoryDealSelectとHistoryOrderSelectは必ずこのような書き方をする必要があります。

  static bool HistorySelectOrder( const ulong Ticket )
  {
    return((::HistoryOrderGetInteger(Ticket, ORDER_TICKET) == Ticket) || ::HistoryOrderSelect(Ticket));
  }

  static bool HistorySelectDeal( const ulong &Ticket )
  {
    return((::HistoryDealGetInteger(Ticket, DEAL_TICKET) == Ticket) || ::HistoryDealSelect(Ticket));
  }

そうでないと、必ずといっていいほどスローになります。

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

MT5とスピードの関係

レナート・ファットフーリン さん 2020.09.02 00:40

アトミック/スナップショットアクセスが必要な膨大なボリューム(数千、数万の案件を履歴で示したのには理由があります)を扱う場合、そのコストを理解する必要があります。

 
EAのOnInitにMessageBoxが ある場合、再ログインする潜在的な問題を回避するために、いくつかの工夫が必要です。
 
社内関数の呼び出しは最小限にとどめ、頻繁に発生する遅延を少なくすることが賢明です。
 

勝てない

2020.04.01 11:49:34 failed instant sell 0.32 EURUSD at 1.09539 [Invalid volume].

市場の総量規制のチェックがある。

なぜこのようなエラーが発生したのかわかりません。

マーケットプレイスバリデーターで
 
Vladimir Pastushak:

勝てない

2020.04.01 11:49:34 failed instant sell 0.32 EURUSD at 1.09539 [Invalid volume].

市場の総量規制のチェックがある。

なぜこのようなエラーが出たのか理解できません。

マーケットプレイスバリデーターで

注文制限をかけられなかったのですか?という感じだったと思います。

 
Edgar Akhmadeev:

ワラントの制限にひっかかったのでは?したと思います。

数量違い、資金の有無の確認、ロット制限の超過も確認とあります。掘り続けろ...

 
Vladimir Pastushak:

正しい音量が書かれていない。

Edgar Akhmadeev:

持っていたようです。

...小容量が大容量入金で開かなかったこと。詳しくは覚えていませんが、セントのあるブローカーは、その商品の注文限度額が非常に小さかったのです。

 

MT5で以下のような問題があります。ストラテジーテスターのビジュアルモードで取引パネルの動作テストをしたいのですが、どうすればいいですか?トレーディングパネルには、入力欄(OBJ_EDIT)があります。入力フィールドのテキストを変更してENTERを押すと、新しいテキストは表示されず、入力フィールドを作成したときに設定した元のテキストが表示されます。つまり、パネルのビジュアルテスト 中に入力フィールドのテキストを変更することはできません。

これはどうすれば解決できるのでしょうか?

コード例

void OnTick()
  {
   string name="EDIT";
   if(ObjectFind(0,name)==-1)
     {
      ObjectCreate(0,name,OBJ_EDIT,0,0,0);
      ObjectSetString(0,name,OBJPROP_TEXT,"EURUSD");
      ObjectSetInteger(0,name,OBJPROP_XDISTANCE,50);
      ObjectSetInteger(0,name,OBJPROP_YDISTANCE,50);
      ObjectSetInteger(0,name,OBJPROP_XSIZE,50);
      ObjectSetInteger(0,name,OBJPROP_YSIZE,20);
      ObjectSetInteger(0,name,OBJPROP_READONLY,false);
      ObjectSetInteger(0,name,OBJPROP_COLOR,clrBlack);
      ObjectSetInteger(0,name,OBJPROP_BGCOLOR,clrWhite);
     }
  }
 

コーディング中にタイトルバーを隠すために、このオートホットキースクリプトを作りました。Windows上のすべてのウィンドウで動作します。他のプラットフォームはわかりません。



; 
Hide borders, title bar 









#IfWinNotActive ahk_class Progman 









#IfWinNotActive ahk_class Shell_TrayWnd 









^] :: 









WinGet Style, Style, A 









if (Style & 0xC40000) { 









WinSet, Style, -0xC40000, A 









WinMaximize, A 













} 









else { 









WinSet, Style, + 0xC40000, A 









WinRestore, A 









} 









return 

その結果、デスクトップ画面は完璧に埋め尽くされました。

ファイル名.ahkとして保存するだけです。それをお好きなディレクトリに保存し、 https://www.autohotkey.com をダウンロードし、インストールしてください。

スクリプトのショートカットを作成し、それをカットします。win+rキーを押す

shell: startupと入力し、ポップウィンドウにショートカットを貼り付けます。

そうすれば、再起動後にウィンドウズでスクリプトが起動します。スクリプトをダブルクリックし、[Ctrl +] でウィンドウのタイトルバーを隠すと、今すぐ起動できます。

ショートカットを使用する際は、ウィンドウが最大化されていないことを確認してください。最大化したウィンドウを最大化する意味がないし、その場合の処理もしてない。

楽しむ

を編集します。

コードフォーマーが変な動きをする。巨大な行間にコードを展開し続ける。笑

AutoHotkey
  • www.autohotkey.com
AutoHotkey provides a simple, flexible syntax allowing you to focus more on the task at hand rather than every single little technicality. It supports not only the popular imperative-procedural paradigm, but also...
ファイル:
 

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

ライブラリ: ベンチマーク

fxsaber, 2020.10.01 23:49

// Возвращает true в некоторых ситуациях, когда чарт не виден.
bool IsInvisible( long chartID = 0 )
{
  bool Res = ::ChartGetInteger(chartID, CHART_IS_MINIMIZED);
  
  if (!Res && !::ChartGetInteger(chartID, CHART_IS_MAXIMIZED) && ::ChartGetInteger(chartID, CHART_IS_DOCKED))
  {
    if (!chartID)
      chartID = ::ChartID();

    for (long Chart = ::ChartFirst(); (Chart != -1) && !Res; Chart = ::ChartNext(Chart))
      Res = (Chart != chartID) && ::ChartGetInteger(Chart, CHART_IS_MAXIMIZED);
  }
  
  return(Res);
}

trueを返した場合、チャート上のトレーディングパネルやその他の情報は更新されません。

理由: