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

 
A100:

見つけにくい実行ミスのプレゼント

CopyTicksはCopyticksよりどのように優れていますか?

そして、その結果が常に-1であるのはなぜか。これらのエラーは、コンパイル時に報告されるべきものです

ERR_INVALID_ARRAY がエラーに なりました。

CopyTicksは、そのサイズがsizeof(MqlTick)と等しい場合のみ、まさにその型である。もちろん、正確にはこのサイズはコンパイル時に確認することができます。

さて、カスタムのCopyTicksは、すべてのMQLルールに従います。


子孫の配列は祖先の配列に変換できない。しかし、エレメント・バイ・エレメント、そうです。これはArrayCopyの制限事項であり、取り除くことができればいいのですが。

 

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

初心者の方からの質問 MQL5 MT5 MetaTrader 5

fxsaber さん 2017.10.19 21:13

// Возвращает true, если нет бара с таким временем ("дырка")
bool IsHole( const string Symb, const ENUM_TIMEFRAMES TimeFrame, const datetime time )
{
  return(Bars(Symb, TimeFrame, SeriesInfoInteger(_Symbol, PERIOD_CURRENT, SERIES_FIRSTDATE), time) +
         Bars(Symb, TimeFrame, time, SeriesInfoInteger(_Symbol, PERIOD_CURRENT, SERIES_LASTBAR_DATE)) ==
         SeriesInfoInteger(_Symbol, PERIOD_CURRENT, SERIES_BARS_COUNT));
}

サーバーにアクセスすることなく動作します。

 
A100:

つかみどころのない実行エラーという名のプレゼント

次のビルドでは、残念ながらギフトはオフになる予定です。

 
このアカウントで仕事をするつもりなのか、しないのか?
Документация по MQL5: Программы MQL5 / Выполнение программ
Документация по MQL5: Программы MQL5 / Выполнение программ
  • www.mql5.com
Каждый скрипт и каждый эксперт работает в собственном отдельном потоке. Все индикаторы, рассчитываемые на одном символе, даже если они запущены на разных графиках, работают в одном потоке. Таким образом, все индикаторы на одном символе делят между собой ресурсы одного потока. В одном потоке с индикаторами также последовательно выполняются...
 

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

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

fxsaber さん 2017.10.31 01:27

ちょっとしたヒント - OBJ_CHARTオブジェクトでEA/スクリプトを実行する。

そのため、実行中のEAは何も実行されず、ハングアップしてしまいます。しかし、スクリプトは完全に動作します。そのため、いくつかの可能性が開けています。

例えば、すでにExpert Advisorが動作しているチャート上で、インジケータからOrder-functionを使用することができます。また、新たに補助チャートを開く必要もありません。

 
fxsaber

ティップオフを 使用していますが、インジケータはそれなしで取引できますが、イベント経由で


 
Vitaly Muzichenko:

インジケーターはなくても取引できますが、ティップスターを 使用しました、イベントを通じて

このため、「スニファ」EAを並列に動作させる、つまり補助チャートが必要です。

この例では状況が多少異なります:チャートが1つあり、その上ですでにいくつかのEAが動作しています。そして、時には新しいインジケータを開かずにOrderSendを 通過させたいと考えています。

もちろん、Market用のDLLがなければ、パスすることはできません。

 
fxsaber

このため、「タップ」EAを並列に動作させる、つまり補助チャートが必要です。

この例では状況が多少異なります:チャートが1つあり、その上ですでにいくつかのEAが動作しています。そして、時には新しいインジケータを開かずにOrderSendを通過させたいと考えています。

もちろん、Market用のDLLがなければ、パスすることはできません。

ビデオでは、DLLなしでも動作しています。Expert Advisorはどのチャートにも1つだけ必要で、現在のチャートにある場合もあります。

 
ヴィタリー・ムジチェンコ

Expert Advisorはどのチャートにも1つだけ必要で、現在のチャートにも1つ 持つことができます。

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

mql5言語の特殊性、微妙なニュアンスとトリック

fxsaber さん 2017.10.31 06:08

この例では、1つのチャートで、すでにいくつかのEAが動作しているという、少し変わった状況になっています。あと、たまに新規に開かずにOrderSendをインジケータに通したいのですが。

 
// Сохранение Bitmap-объекта в bmp/gif/png-файле (прозрачность не учитывается)
bool BitmapObjectToFile( const long chartID, const string ObjName, const string FileName, const bool FullImage = false )
{  
  const ENUM_OBJECT Type = (ENUM_OBJECT)ObjectGetInteger(chartID, ObjName, OBJPROP_TYPE);  
  bool Res = (Type == OBJ_BITMAP_LABEL) || (Type == OBJ_BITMAP);
             
  if (Res)
  {
    const string Name = __FUNCTION__ + (string)MathRand();

    ObjectCreate(chartID, Name, OBJ_CHART, 0, 0, 0);
    ObjectSetInteger(chartID, Name, OBJPROP_XDISTANCE, -1 e3);
    
    const long chart = ObjectGetInteger(chartID, Name, OBJPROP_CHART_ID);
        
    Res = ChartSetInteger(chart, CHART_SHOW, false) && ObjectCreate(chart, Name, OBJ_BITMAP_LABEL, 0, 0, 0) &&
          ObjectSetString(chart, Name, OBJPROP_BMPFILE, ObjectGetString(chartID, ObjName, OBJPROP_BMPFILE)) &&
          (FullImage || (ObjectSetInteger(chart, Name, OBJPROP_XSIZE, ObjectGetInteger(chartID, ObjName, OBJPROP_XSIZE)) &&
                         ObjectSetInteger(chart, Name, OBJPROP_YSIZE, ObjectGetInteger(chartID, ObjName, OBJPROP_YSIZE)) &&
                         ObjectSetInteger(chart, Name, OBJPROP_XOFFSET, ObjectGetInteger(chartID, ObjName, OBJPROP_XOFFSET)) &&
                         ObjectSetInteger(chart, Name, OBJPROP_YOFFSET, ObjectGetInteger(chartID, ObjName, OBJPROP_YOFFSET)))) &&
                         ChartScreenShot(chart, FileName, (int)ObjectGetInteger(chart, Name, OBJPROP_XSIZE),
                                                          (int)ObjectGetInteger(chart, Name, OBJPROP_YSIZE));
    ObjectDelete(chartID, Name);
  }                    

  return(Res);
}


アプリケーション

// Сохраняет в png-файлах все Bitmap-объекты текущего чарта
void OnStart()
{  
  for (int i = ObjectsTotal(0) - 1; i >= 0; i--)
  {
    const string Name = ObjectName(0, i);
    
    BitmapObjectToFile(0, Name, (string)ChartID() + "\\" + Name + ".png");    
  }      
}


SZY BMP->GIF/PNGコンバータも実装されました。

理由: