エラー、バグ、質問 - ページ 3137

 
こんにちは。
選択したすべての商品の履歴でEAをテスト すると、テスターは通貨ペアの結果しか出しませんが、暗号の場合は「oninit returns non-zero code 1」と出ます。どうしたらいいのでしょうか?経験した人はいますか?
 
lapundra1 #:
こんにちは。
選択したすべての商品の履歴でEAをテスト すると、テスターは通貨ペアの結果しか出しませんが、暗号の場合は「oninit returns non-zero code 1」と出ます。どうしたらいいのでしょうか?誰が持っていたのか?

123行目をコメントアウトすると、エラーは解消されます。テレパスとしてお伝えしています :)- というのも、コードがないので、テレパシーしかないのです。)

 

ごあいさつ

ターミナルでMT5を実行するとエラーが発生する。

2022.01.03 15:33:30.108 バーチャルホスト バーチャルホストのリストの取得に失敗しました [1001] (tls - create certificate chain engine failed)。

2022.01.03 15:34:30.945 シグナル '56334871': シグナルのリストの取得に失敗 しました。


そして次に、MetaEditorでリポジトリに接続しようとしたとき。

2022.01.03 15:34:39.668 Storage projects list request failed with error 1001.

2022.01.03 15:34:46.561 Storage MQL5 Storage のアクティベーションに失敗しました [1001]。


同時に、別のコンピューターとの接続もうまくいき、すべての変更がStorageに送信された。

コンピュータにネットワークの問題は検出されず、すべて正常に動作しました。ここ数カ月もパソコンで「危険な」行為はしていませんし、すべて順調に動いています。ビルドは3140。

どの方向に掘ればいいのか?


 

マドリードの秘密」にも触れないし、インジケーターハンドルが0や1ではなく10からインデックスを開始するのはなぜなのか、そんなことは気にしない、我慢できる。

なぜかというと、同じインディケータに2種類の独立したハンドルがあり、2番目のハンドルを削除すると、2番目のMAだけでなく、1番目のMAも消えてしまうからです。つまり、片方のハンドルを外すと、もう片方も死んでしまうのです。以下は、ヘルプにあるiMAの コードを高度に簡略化し、二重化したものです。

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2

#property indicator_label1  "iMA1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1

#property indicator_label2  "iMA2"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrBlue
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1

double iMABuffer1[], iMABuffer2[];
int    handle1, handle2;
int    bars_calculated=0;

int OnInit()
  {
   SetIndexBuffer(0,iMABuffer1,INDICATOR_DATA);
   SetIndexBuffer(1,iMABuffer2,INDICATOR_DATA);

   PlotIndexSetInteger(0,PLOT_SHIFT,0);
   PlotIndexSetInteger(1,PLOT_SHIFT,0);

   handle1=iMA(_Symbol,PERIOD_CURRENT,10,0,MODE_SMA,PRICE_CLOSE);
   handle2=iMA(_Symbol,PERIOD_CURRENT,20,0,MODE_SMA,PRICE_CLOSE);

   return(INIT_SUCCEEDED);
  }

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int values_to_copy;

   int calculated=BarsCalculated(handle1);
   if(calculated<=0) return(0);

   if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)
      if(calculated>rates_total) values_to_copy=rates_total;
      else                       values_to_copy=calculated;
   else
      values_to_copy=(rates_total-prev_calculated)+1;

   if(!FillArrayFromBuffer(iMABuffer1,0,handle1,values_to_copy)) return(0);
   if(!FillArrayFromBuffer(iMABuffer2,0,handle2,values_to_copy)) return(0);

   //if(handle2!=INVALID_HANDLE)
   //   Print(IndicatorRelease(handle2));

   bars_calculated=calculated;

   return(rates_total);
  }

bool FillArrayFromBuffer(double &values[],
                         int shift,
                         int ind_handle,
                         int amount
                         )
  {
   if(CopyBuffer(ind_handle,0,-shift,amount,values)<0)
      return(false);

   return(true);
  }

void OnDeinit(const int reason)
  {
   if(handle1!=INVALID_HANDLE)
      IndicatorRelease(handle1);
   if(handle2!=INVALID_HANDLE)
      IndicatorRelease(handle2);
  }

この2行のコメントを解除すると、何も描画されないという結果になります。予想:最初のMA(赤)が残っている。

...そして、私がやりたかったことは、記憶をきれいにすることでした。

 
x572intraday #:

マドリッド裁判所の謎を調べる気もないし、インジケータ・ハンドルがなぜ0や1ではなく10からインデックスを開始するのかを考えることも神様に禁じられています。

なぜかというと、同じインディケータに2種類の独立したハンドルがあり、2番目のハンドルを削除すると、2番目のMAだけでなく、1番目のMAも消えてしまうからです。つまり、片方のハンドルを外すと、もう片方も死んでしまうのです。以下は、ヘルプにあるiMAの コードを高度に簡略化し、二重化したものです。

この2行のコメントを解除すると、何も描画されないという結果になります。予想:最初のMA(赤)が残っている。

...そして、私がやりたかったことは、メモリを掃除することでした。

少なくとも。

if(handle2!=INVALID_HANDLE && !FillArrayFromBuffer(iMABuffer2,0,handle2,values_to_copy)) return(0);
 
JRandomTrader #:

最低でもね。

確認しましたか?私には効果がありませんでした。そして、片方を削除し(メモリ解放で)、もう片方を視覚的に残せばよいのです。そして、あなたのロジックから次のようになります:2番目のハンドルが存在し、2番目のバッファが満たされていない場合、終了し、それはIndicatorRelease(ハンドル2)と私のラインに来ることさえありません(私が正しい場所にコードを挿入している場合)。

 
   int dim=5;
   int Arr1[5];// OK
   int Arr2[dim];// '[' - invalid index value

完全にやられたのか、バグでなければHelpでスワットを突くのか、どちらかです。

 
x572intraday #:

完全にイカれてるのか、バグじゃないならHelpで突いてくれ。

静的配列のサイズは int ではなく、定数です。

 
Valeriy Yastremskiy #:

静的配列の次元はintではなく定数です。

この方法でベクトルを定義することは可能ですが、それらは2倍でしかありません。

int n = 5;
vector v(n);
v[0] = 1.2;
 
Aleksey Nikolayev #:

そうやってベクトルを定めても、ダブらせるだけ。

なるほど。それならリサイズしたほうがいいですね。