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

 
Nikita Chernyshov:

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

そして、これは古いコードですが、写真で見ると、TrailingStop です。

 
テスターのOnInitのEventSetTimerは、最初のティックの日の始まりからカウントダウンするのではなく、テスト区間の開始日、つまり残高トランザクションからカウントダウンします。
 
fxsaber:
テスターのOnInitのEventSetTimerは、最初のティックの日の初めからではなく、テスト間隔の最初の日付、つまりバランストランザクションからカウントダウンします。
EventSetTimer は、常に EventSetTimer 呼び出しの 瞬間からタイマーのカウントダウンを開始します。テスターと端末の両方で
 

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

mql4言語の特徴、TipsとTricks

fxsaber, 2019.02.12 13:12

多次元配列 に対するArrayResizeの機能
void OnStart()
{
  int Array[][2];
  
  Print(ArrayResize(Array, 7)); // MQL5 - 7, MQL4 - 14
  Print(ArraySize(Array));      // 14
}
 

5のキムの機能を見ることができたらどんなにいいだろう。ヒントをお願いします。キムの中にこんな関数がありました。

//+------------------------------------------------------------------+
//|  Проверяет был ли открыт последний ордер на этой же свече        |
//|  Checks whether the opened last the order on the same candle     |
//+------------------------------------------------------------------+
bool IfOrdOpClSelfBar(int magik = 0, int bar = 0, int typ = -1,string sy = "",int per = 0){
   if(sy == ""){sy = Symbol();}
   if(per==0){per=Period();}
   for(int i = OrdersTotal(); i>=0; i--){
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
         if(OrderSymbol()!=sy){continue;}
         if(OrderType()==typ||typ==-1){
            if(OrderMagicNumber()==magik||magik==0){
               if(OrderOpenTime()>=iTime(sy,per,bar)){return(true);}
            }
         }
      }
   }
   for(i = OrdersHistoryTotal(); i>=0; i--){
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)){
         if(OrderSymbol()!=sy){continue;}
         if(OrderType()==typ||typ==-1){
            if(OrderMagicNumber()==magik||magik==0){
               if(OrderOpenTime()>=iTime(sy,per,bar)){return(true);}
            }
         }
      }
   }   
   return(false);
}

mql5で書き直そうとしています。しかし、それは働こうとしない。どうやって強制するのか?:)

//+------------------------------------------------------------------+
//|  Проверяет был ли открыт последний ордер на этой же свече        |
//|  Checks whether the opened last the order on the same candle     |
//+------------------------------------------------------------------+
bool IfOrdOpClSelfBar(ENUM_ORDER_TYPE type)
{

   for(int i = OrdersTotal(); i>=0; i--){
      if(OrderSelect(OrderGetTicket(i)) >0)
        {
         if(OrderGetString(ORDER_SYMBOL)!=_Symbol){continue;}
         if(OrderGetInteger(ORDER_TYPE)==type)
           {
            if(OrderGetInteger(ORDER_MAGIC) == magicN)
             {
               if(OrderGetInteger(ORDER_TIME_SETUP) >= iTime(NULL,Period(),0)){return(true);}
             }
           }
        }
      }
      
   for(int i = HistoryOrdersTotal(); i>=0; i--){
     if(HistoryOrderSelect(OrderGetTicket(i)) >0)
          {
         if(OrderGetString(ORDER_SYMBOL)!=_Symbol){continue;}
         if(OrderGetInteger(ORDER_TYPE)==type)
           {
            if(OrderGetInteger(ORDER_MAGIC) == magicN)
             {
               if(OrderGetInteger(ORDER_TIME_SETUP) >= iTime(NULL,Period(),0)){return(true);}
             }
           }
          }
    }
   
   return(false);
}
 
Nikita Chernyshov:

5のキムの機能を見ることができたらどんなにいいだろう。ヒントをお願いします。キムの中にこんな関数がありました。

mql5で書き直そうとしています。しかし、それは働こうとしない。どうやって強制するのか?:)

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

ライブラリ:MT4Orders

fxsaber, 2019.01.13 17:23

キムさんのMT4での機能はかなり人気があるので、彼のサイトからすべてのソースをダウンロードし、MT5での簡単な「コンバータ」を書きました。
#include <KimIVToMT5.mqh> // https://c.mql5.com/3/263/KimIVToMT5.mqh

#include "e-Trailing.mq4" // http://www.kimiv.ru/index.php?option=com_remository&Itemid=13&func=fileinfo&id=14

void OnTick() { start(); }
 
fxsaber:

松葉づえをありがとうございます、とても良いです :)でも、理解のために5円玉を覚えて、夢中になっているので、根本的にナックルを整理して、手で扱うことが大事なんです。

 

何百万ものティックを解析している間、定期的にメモリの消費量を見ることにしました。

変更を加えてから、実行速度が何度も落ちていることに気がつきました。


理由:TerminalInfoIntegerの使用 方法のバリエーションによっては、実行に非常に長い時間がかかるため。

#define  BENCH(A)                                                              \
{                                                                             \
  const ulong StartTime = GetMicrosecondCount();                              \
  A;                                                                          \
  Print("Time[" + #A + "] = " + (string)(GetMicrosecondCount() - StartTime)); \
}  

void OnStart()
{
  BENCH(TerminalInfoInteger(TERMINAL_MEMORY_USED)); // 28220
}
気をつけてください。
 
TerminalInfoInteger(TERMINAL_MEMORY_USED)

非常に高価な機能です。

TERMINAL_MEMORY_AVAILABLEも。

TERMINAL_MEMORY_PHYSICALおよびTERMINAL_MEMORY_TOTALは,最初のリクエストの後にキャッシュされる。それ以降のクエリでは、キャッシュされた値が返されます。

 
一部のファイル(*.bat など)は、FileIsExists では見られませんが、FileFindNext では見つかります。
理由: