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

 
Alexey Viktorov:
なぜ?
トライアル
 
Nikolai Semko:
トライアル

しかし、ここで

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

mql5の特性、ヒントとコツ

ニコライ・セムコ, 2019.04.03 22:33

はい、ありがとうございます、アレクセイ。この機能を忘れていました。以前見たが、使ったことがない。

試してみました。何かが間違っている。削除されるのですが、削除した後、すべてがフリーズしてしまいます。

インジケーターの計算 前のDrawSetup()関数に、以下のパラメータで1行だけコードを追加しただけです。

IndicatorRelease(handle);
handle=iMA(_Symbol,_Period,per1,0,MaMethod,PriceBase);
for(int i=0;i<N;i++) handle=iMA(_Symbol,_Period,per2,0,MaMethod,handle);

インジケーターが単に動かなくなっただけで、原因はまだわかりません。

まったくもって同感です。ただの無駄なオモチャです。


まったくそんなことはない。
 
Alexey Viktorov:

しかし、ここで


そんなことはないんです。
以前試したのですが、失敗して自分からコードを削除してしまいました。
 
また、最も深く埋まっているものから順に、連鎖的にすべてのハンディキャップを解放してみるのもよいでしょう。
 
Andrey Khatimlianskii:
また、最も深く埋まっているハンドルから順に、連鎖的にすべてのハンドルを解放してみるのもよいでしょう。

まあ、ダメなんですけどね。あるいは、うまくいったとしても、何らかのブレーキがかかる。

void BuildMaFromMa()
  {
   static int h[];
   for(int i=0;i<ArraySize(h);i++) IndicatorRelease(h[i]);
   handle=iMA(_Symbol,_Period,per1,0,MaMethod,PriceBase);
   ArrayResize(h,N);
   if (N>0) h[0]=handle; 
   for(int i=0;i<N;i++)
     {
      handle=iMA(_Symbol,_Period,per2,0,MaMethod,handle);
      h[i]=handle;
     }
  }

IndicatorReleaseで ラインを文書化すれば、すべてうまくいくのですが、そうでない場合は何らかのブレーキがかかり、何が起こっているのか理解できません。

ファイル:
 

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

指標:MaFromMa

ニコライ・セムコ さん 2019.04.04 01:00

再帰と反復の性能を比較したかったのです。

再帰の方が2倍以上速いことが判明...。

おそらく、スタックの方が速いので...。

すごいことなんですよ。逆効果になると思っていました。))

#define  size 1000000
uint sum1=0,sum2=0;
int i;
int X[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
  {
   ArrayResize(X,size);
   for(i=0;i<size;i++) X[i]=rand();

   ulong t=GetMicrosecondCount();
   i=0;
   while(i<size) { sum1+=X[i]; i++;}
//Recursion();
   ulong t1=GetMicrosecondCount()-t;

   t=GetMicrosecondCount();
   i=0;
//while(i<size) { sum1+=X[i]; i++;}
   Recursion();
   ulong t2=GetMicrosecondCount()-t;
   Print("время выполнения цикла    = "+string(t1)+" , контрольная сумма = "+string(sum1));
   Print("время выполнения рекурсии = "+string(t2)+" , контрольная сумма = "+string(sum2));
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Recursion()
  {
   sum2+=X[i];
   i++;
   if(i<size) Recursion();
  }
//+------------------------------------------------------------------+
2019.04.03 19:06:40.776 TestLoopVsRecursion (EURUSD,M1) время выполнения цикла    = 1667 , контрольная сумма = 3510404212
2019.04.03 19:06:40.776 TestLoopVsRecursion (EURUSD,M1) время выполнения рекурсии = 697 , контрольная сумма = 3510404212
2019.04.03 19:06:41.697 TestLoopVsRecursion (EURUSD,M1) время выполнения цикла    = 1653 , контрольная сумма = 3492310620
2019.04.03 19:06:41.697 TestLoopVsRecursion (EURUSD,M1) время выполнения рекурсии = 699 , контрольная сумма = 3492310620
2019.04.03 19:06:42.549 TestLoopVsRecursion (EURUSD,M1) время выполнения цикла    = 1529 , контрольная сумма = 3510953577
2019.04.03 19:06:42.549 TestLoopVsRecursion (EURUSD,M1) время выполнения рекурсии = 696 , контрольная сумма = 3510953577
2019.04.03 19:06:43.332 TestLoopVsRecursion (EURUSD,M1) время выполнения цикла    = 1559 , контрольная сумма = 3512212419
2019.04.03 19:06:43.332 TestLoopVsRecursion (EURUSD,M1) время выполнения рекурсии = 698 , контрольная сумма = 3512212419
2019.04.03 19:06:44.098 TestLoopVsRecursion (EURUSD,M1) время выполнения цикла    = 1707 , контрольная сумма = 3497178596
2019.04.03 19:06:44.098 TestLoopVsRecursion (EURUSD,M1) время выполнения рекурсии = 472 , контрольная сумма = 3497178596
2019.04.03 19:06:44.839 TestLoopVsRecursion (EURUSD,M1) время выполнения цикла    = 2088 , контрольная сумма = 3485051380
2019.04.03 19:06:44.839 TestLoopVsRecursion (EURUSD,M1) время выполнения рекурсии = 482 , контрольная сумма = 3485051380
2019.04.03 19:06:45.538 TestLoopVsRecursion (EURUSD,M1) время выполнения цикла    = 1612 , контрольная сумма = 3487817581
2019.04.03 19:06:45.538 TestLoopVsRecursion (EURUSD,M1) время выполнения рекурсии = 448 , контрольная сумма = 3487817581
2019.04.03 19:06:46.397 TestLoopVsRecursion (EURUSD,M1) время выполнения цикла    = 1742 , контрольная сумма = 3475121003
2019.04.03 19:06:46.397 TestLoopVsRecursion (EURUSD,M1) время выполнения рекурсии = 497 , контрольная сумма = 3475121003
2019.04.03 19:06:47.262 TestLoopVsRecursion (EURUSD,M1) время выполнения цикла    = 1701 , контрольная сумма = 3485556615
2019.04.03 19:06:47.262 TestLoopVsRecursion (EURUSD,M1) время выполнения рекурсии = 701 , контрольная сумма = 3485556615

 

皆さん、MT5でストップロス なしで、入金額に対する割合でロットを計算する、試行錯誤した信頼できる機能はありますか?

共有...

 
最適化中に、テスターログに次のようなメッセージが表示されることがあります。
Tester  OnTesterInit failed. Optimization cannot be started.


このメッセージからは、Terminalのログを参照することが全くできないため、原因を把握することはほぼ不可能です。そこで原因を探る必要があります。


以下は、そのようなEAの例です。

input int Range = 0; // 1..9

int Tmp = 1 / Range;

void OnTesterDeinit() {}

double OnTester()
{
  return(Tmp);
}


Expert Advisorは、Rangeが0にならない範囲で最適化されます。しかし、同時に最適化も失敗してしまう。

Expert AdvisorのFrameモードは、常にEX5で厳密に規定された入力パラメータで起動されるからである。この場合、Frameモードでは0による除算と なる。

OnTesterDeinitをソースコードから削除すると、Optimizationは問題なく実行されます。


このような状況でTesterJournalがTerminalJournalへの参照を持つのは良いことだと思います。そうしないと、何が起こっているのかがわからない(Optimization中はデバッグができない)ことがあります。

 

EAがチャート上で起動しない状況に遭遇することがあります。

左側はEAをチャートにドラッグしたときの通常のカーソルです。右は私たちのケースです。


ログには何も記録されません。一般に、バーリング・カーソルは、このようなチャートを視覚的に識別する唯一のものである。


tplテンプレートを保存すると、これらのチャートは一行で区別されるようになります

tester=1

これはおそらく、チャートの種類を特定するための唯一のプログラム上のオプションです。フレームチャートなんです。


ですから、自動売買から身を守りたいのであれば、このチャートだけで作業すればいいのです。

 

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

バグ、バグ、質問

Nikolai Semko:

合成ツールの数式で、記号名がドットで始まる(または含む)場合、"Unknown parsing error "というエラーが発生する。

スラバ さん 2019.04.19 06:08

文字名に フルストップやダッシュなどよくわからないものが含まれている場合("RTS-12.19 "はどうでしょう)、文字名をアポストロフィで囲む必要があります。

理由: