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

 
alexvd:

ストップとTPはどのように設定するのですか?

最初にポジションを建ててから修正するのか、それともすぐに適切なSLとTPを指定するのか?

まずポジションを開いてから 修正する...。
 
Voodoo_King:

ビルド384です。履歴を見るときに、設定したストップロスやテイクプロフィットレベルの注文が表示されないのですが・・・。


オーダー設定時に「表示」されます。これは、サーバーがポジションを 閉じる際にストップを設定しないため、当然といえば当然です。
















































































































 

というような発見がありました。バグかどうかわからないが、バグに見える。以下のコードです。

lot=NormalizeDouble(My_AccountInfo.MaxLotCheck(_Symbol,ORDER_TYPE_BUY,latest_price.ask)/10,2);
printf(lot);

テスターログに出力(1000円の保証金で)。

2011.01.28 20:06:48    Core 1    2010.01.04 00:56:00   0.07000000000000001

関数(NormalizeDouble)は7以降の0以外の数字を削除してはいけないのでしょうか?

フォームに解決策を見出したと思った。lot=floor((My_AccountInfo.MaxLotCheck(_Symbol,ORDER_TYPE_SELL,latest_price.ask)/10)*100)/100,

が、私も同じような結果になりました。何をすべきか - トレードクエリではどの程度重要か?

 

こんにちは。

ループの本体にComment関数を追加して、ループの実行状況のパーセンテージと他のいくつかの値を表示できるようにしました。この単純なアルゴリズムは、ループ本体での実行に5分(それ以上でないとしても)かかりましたが、32000本のバーの値(Close, High, Low, Open)を再計算しただけです。ループの実行中に配列が動的に増えていると訴えたが、そんなことはない。アルゴリズムのデバッグ後、Commentは削除されました - 計算は神頼みで行われるようになりました。

Comment機能は本当にプログラムの実行を 遅くするのでしょうか?率直に言って驚いています。

システム:Windows XP、Terminal 5.00.384。

Документация по MQL5: Программы MQL5 / Выполнение программ
Документация по MQL5: Программы MQL5 / Выполнение программ
  • www.mql5.com
Программы MQL5 / Выполнение программ - Документация по MQL5
 
KffAlex:

こんにちは。

ループの本体にComment関数を追加して、ループの実行状況のパーセンテージと他のいくつかの値を表示できるようにしました。この単純なアルゴリズムは、ループ本体での実行に5分(それ以上でないとしても)かかりましたが、32000本のバーの値(Close, High, Low, Open)を再計算しただけです。ループの実行中に配列が動的に増えていると訴えたが、そんなことはない。アルゴリズムのデバッグ後、Commentは削除されました - 計算は神頼みで行われるようになりました。

Comment機能は本当にプログラムの実行を 遅くするのでしょうか?率直に言って驚いています。

システム:Windows XP、Terminal 5.00.384。

同じような効果があることに気づきました。
 

始値のみで Expert Advisorを実行すると、始値ではなく高値で売りポジションを建て、安値で決済されます。

なぜ、このようなことが起こるのでしょうか。

Expert Advisorは、Open[0]価格のみを使用してポジションのオープンとクローズのシグナルを検索します。 EventSetTimer(1)が使用されています。

 
Valmars:

注文時に出力される。サーバーがストップを使ってポジションをクローズした場合は利用できません。サーバーはポジションクローズ時にストップを設定しないため、当然のことですが。

どうしたの?)注文の際、どこに表示されるのですか?

履歴」レポートについてですが、ポジションにこれらの値があるにもかかわらず、ストップロスやテイクプロフィットの 欄に何も表示されないのですが。

ストップロスが設定されたかどうかを知るにはどうしたらいいのでしょうか?つまり、発動された場合は見ることができますが、そうでない場合はどうしたらいいのでしょうか?

 

次のような疑問があります。

タスクは、テストフェーズでEquity値を特定のファイルに書き込み、以前の値を消去することである。

しかし、ここで起こるのは次のようなことです。

1.OnInit()において、FileDelete() が存在しない場合、既存のものに加えて書き込まれる。

2.しかし、OnInit() の FileDelete() があると、OnCalculatde() で同じ Equity レコードがあるにもかかわらず、結果のファイルは空になってしまうのです。

なぜそうなるのか、どうすれば回避できるのか。

以下はそのコードです。

#property copyright "Copyright 2010, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
#property indicator_label1  "Label1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  Red
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
double   Values[];
string   Array[];
string   filename="equity FileWrite25.txt";
int      handle;
int      NumberCopyElements;
string   common_folder;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(){
   SetIndexBuffer(0,Values,INDICATOR_DATA);
   PlotIndexSetInteger(0, PLOT_DRAW_BEGIN, 100);
   PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, EMPTY_VALUE);
   ArraySetAsSeries(Values, false);
   //---
   common_folder=TerminalInfoString(TERMINAL_COMMONDATA_PATH);
   FileDelete(filename,FILE_COMMON);
   return(0);
}
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[])
{  
   uint written;
   handle=FileOpen(filename,FILE_WRITE|FILE_READ|FILE_COMMON|FILE_TXT);
   if(handle!=INVALID_HANDLE){
      FileSeek(handle,0,SEEK_END);
      written=FileWrite(handle,TimeToString(TimeCurrent())," ",AccountInfoDouble(ACCOUNT_EQUITY));//TimeToString(time[i]),
      PrintFormat("Equity FileWrite25 - OnCalculate(): Записано %d байт в общую папку всех терминалов - %s",written,common_folder);
   }
   else {
      Print("Equity FileWrite25 - OnCalculate(): Не удалось открыть файл ",filename,".  Ошибка ",GetLastError());     
   }
   FileClose(handle);
   return rates_total;
}
void OnDeinit(const int reason){
   FileClose(handle);
}
 
Voodoo_King:

どうしたもん)注文時にどこに表示されるのですか?

履歴」レポートについてですが、ポジションにはこれらの値があるのに、Stop Loss と Take Profit の欄には何も表示されません。

ストップロスが設定されたかどうかを知るにはどうしたらいいのでしょうか? うまくいった場合はわかりますが、そうでない場合は?

履歴/注文」タブに表示されていますが、ストップがかかったときにサーバーがポジションを閉じる ために使用する、注文のストップロスとテイクプロフィットは何に相当するのでしょうか?注文のパラメータを正確に見ているのですね。
 
DV2010:

次のような疑問があります。

タスクは、テストフェーズでEquity値を特定のファイルに書き込み、以前の値を消去することである。

しかし、ここで起こるのは次のようなことです。

1.OnInit()において、FileDelete()が存在しない場合、既存のものに加えて書き込まれる。

2.しかし、OnInit()のFileDelete()があると、OnCalculatde()のEquityレコードが同じにもかかわらず、結果のファイルが空になってしまうのです。

なぜそうなるのか、どうすれば回避できるのか。

そのコードを以下に示す。

テストモード検出の解答を得たが、経験主義的なところがあり、恥ずかしくなった

(テスターの開始時刻をプログラムで取得し、そこから歴史の深みへとインデントし、実時間を切り離す機会を探そうとしました)。

が、残念ながら見つかりませんでした)。

   if(rates_total - prev_calculated > 1 && rates_total - prev_calculated < 10000){
    FileDelete(filename,FILE_COMMON);
   }   
ただ、全く性質の違う問題があって、テスト 期間を変更すると、テスト結果に応じた指標がなぜか消えてしまうのですが、その後に新しい期間のコンパイルをすると、テスターを実行すると表示されるのです。

バグ?