初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 779

 
Alexey Volchanskiy:

.ex5は誰の役にも立ちません、助けて欲しいならソースコードを公開してください。


くそっ、ソースコードかと思った :-)他のアイコンも見ているのですが...。どれが元ネタなんだろうと思ったら......これか :-)

ないことがわかった...。

ファイル:
ChekParam.mq5  11 kb
 

ポイントは、端からマイナス3本目の小節のパルスがゼロであり、ゼロとして描画されることです。しかし、バッファの中では0ではない。

何が原因かわかりませんが、icustomをバイパスして、新しいインジケータにPULSEのコードをすべて貼り付けることで解決しました。

マイナス2小節目ではエラーは出ませんでした。他のコードは何も変えていないので、本当にメタクォートのバグなんです。

 
LookingFor:

ポイントは、端からマイナス3本目の小節のパルスがゼロであり、ゼロとして描画されることです。しかし、バッファの中では0ではない。

何が原因かわかりませんが、icustomをバイパスして、新しいインジケータにPULSEのコードをすべて貼り付けることで解決しました。

マイナス2小節目ではエラーは出ませんでした。他のコードは何も変えていないので、本当にmetaquoteのバグなんです。


残念ながら、助けを求めることによって、あなたは材料を与えなかった...。

 
誰か助けてくれませんか?インジケーターが正しく表示されないのですが、どのようなエラーなのでしょうか?
ファイル:
ChekParam.mq5  11 kb
 
Vladislav Andruschenko:

残念なことに、助けを求めたときに、資料を渡さなかった...。

ウラジスラフ、正義の名において、また、すべてを理解したいという願いから、そして、あなたへの敬意から、私はあなたにコードを渡します。


//+------------------------------------------------------------------+
//|                                                   PULS_SWING.mq5 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_plots   1
//--- plot Pulse_Swing
#property  indicator_label1  "Pulse_Swing"
#property  indicator_type1   DRAW_LINE
#property  indicator_color1  clrRed
#property  indicator_style1  STYLE_SOLID
#property  indicator_width1  1
//--- input parameters
input double   points=0.005;
input double   begin_price_level=1.0;
//--- indicator buffers
double         Pulse_Swing [], pulse [] , trend [] , delta [];
int PULSE_Handle ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,Pulse_Swing,INDICATOR_DATA);
   SetIndexBuffer(1,pulse,INDICATOR_CALCULATIONS);
   SetIndexBuffer(2,trend,INDICATOR_CALCULATIONS);
   SetIndexBuffer(3,delta,INDICATOR_CALCULATIONS);
   IndicatorSetInteger(INDICATOR_DIGITS,0);
   ResetLastError(); 
   PULSE_Handle = iCustom(NULL,0,"PULSE",
                          points,          // Points
                          begin_price_level          // begin_price_level
                          );
   Print("PULSE_Handle",PULSE_Handle,"  error = ",GetLastError()); 
//---
   PlotIndexSetInteger(0,PLOT_LINE_STYLE,STYLE_SOLID);
   //ArrayFree (pulse);ArrayFree (delta);ArrayFree (Pulse_Swing);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
   int  bar, start  ;
   if (prev_calculated==0)
   {pulse [0] = pulse [1] =0; start =begin+2 ;}
   else {start = prev_calculated ;}
   //Print(IntegerToString(bar));
   for (bar= start ;bar<rates_total;bar ++)
   {CopyBuffer(PULSE_Handle,0,bar,1,pulse);
   //Print(IntegerToString(pulse[bar]));
   if ((pulse [bar-1]- pulse [bar -2])>0) trend[bar-1] = 1 ; // 
   else
   if ((pulse [bar-1] - pulse [bar -2])<0) trend[bar-1] = -1 ; //
   else
   if (pulse [bar-1] == pulse [bar -2])  {trend[bar-1] = trend[bar-2] ;} // 
   else 
   continue ;
   delta[bar] = pulse[bar]- pulse[bar-1];
   if (trend [bar-1]== 1 && pulse [bar] != pulse [bar-1])
   Pulse_Swing [bar] = Pulse_Swing [bar-1] + delta[bar];
   else
   if (trend [bar-1]== -1 && pulse [bar] != pulse [bar-1])
   Pulse_Swing [bar] = Pulse_Swing [bar-1] - delta[bar];
   else
   if (delta [bar]==0 )Pulse_Swing [bar] = Pulse_Swing [bar-1] ;
   }
   //Print(IntegerToString(delta[rates_total-1]));
   Print(IntegerToString(delta[rates_total-2]));
   //Print(IntegerToString(pulse[rates_total-1]));
   Print(IntegerToString(pulse[rates_total-3]));
   Print(IntegerToString(pulse[rates_total-2]));
   Print(IntegerToString(pulse[rates_total-1]));
  
//--- return value of prev_calculated for next call
   return(rates_total);
  }
 

トレード操作 の結果が読めないのですが。こんな風に書きました。

MqlTradeRequest request={0};
MqlTradeResult result={0};
//--- установка параметров операции
....
//--- отправка запроса
if ( !OrderSend(request,result) )
  PrintFormat("OrderSend error %d",GetLastError()); // если отправить запрос не удалось
else // Я хочу получить парамеры резултата
{ Sleep(9999); // Жду получения резултата
  double ClosePrice=result.price;
}

Sleepを削除すると、常にClosePrice=0.0になります。10秒待っても(それ以上待ちたくない)、ほとんど結果が出るのですが、出ないときもあります。

常に結果を得るにはどうしたらよいですか?

OrderSend() の説明には、:

備考

取引依頼は、取引サーバー上でいくつかの検証段階を経て行われます。ま ず、リクエストパラメーターの必須項目がすべて正しいか どうかがチェックされ、エラーがなければ、サーバーはさらなる処理のために注文を受け付けます注文が取引サーバーに正常に受け入れられた場合、OrderSend()関数はtrueを返します。

つまり、OrderSend()からtrueを取得しても、MqlResultパラメータを取得しない、という理解でよろしいでしょうか。

いつになったら、私のところに来るの?

 
Ivan Ivanov:

トレードの結果が 読めない。

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

注文の変更時にエラー131が発生する

fxsaber さん 2017.09.12 19:47

取引サーバー名とシンボルを書き込むだけで、誰でも自分で試せるので、すぐに問題が解決します。

その間に、解決策を見つけることではなく、YES/NOを答えることが課題であるような気がしてくるのです。

 

紳士プログラマー諸君。

質問ですが、MT5のStrategy Testerが 建値でのみ良い結果を示した場合、ロボットも建値でのみ取引を開始し、同じ結果になるのでしょうか?

 
Dzyga:

紳士プログラマー諸君。

質問:MT5のStrategy Testerが 建値でのみ良い結果を示した場合、ロボットは建値でのみ取引を開始し、同じ結果になるのでしょうか?


確認方法は簡単で、EAでは始値(バー誕生時)のみで取引を開始し、Strategy Testerではティック生成モード「All ticks」で確認します。

 

同僚、助けてください

ループのどこが悪いのかわからない、Handleからのデータがpsa1配列に入らない

if (prev_calculated == 0 ){i=bars =start=1;}
  else {start = prev_calculated ;}
  for ( bars=start ; bars<rates_total ; bars ++)
  {CopyBuffer(pulse_Handle,0,start,1,pca1);
  
  if (pca1[bars]!=pca1[bars-1]) {pca2[i]=pca1[bars]; i++;
  string s="";s=IntegerToString(pca1[bars])+"  ";Print(s); continue;}
  else continue ;}
理由: