初心者の方からの質問 MQL4 MT4 MetaTrader 4 - ページ 180

 
Igor Makanu:

そうですね、私も同じ意見ですが、履歴やインジケーターバッファの 数だけでなく、メモリ割り当てについても、もしMT4がすべてのメモリを食い尽くしたら、動作が遅くなるようです。

間違いなく、開発者が答えることができますが、我々はMetaTrader 4について話している、とここで...

 
Alexander Fedosov:

なぜ、コードの中で計算をするのですか?

計算をしないでください - この話題はスマートではなかったし、オプティマイザが何をするのか興味があったので、コードを起草してみました。

このような形でコードに追加してもよいでしょう。

int handle=INVALID_HANDLE;
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   handle=FileOpen("tst.txt",FILE_READ|FILE_WRITE|FILE_TXT);
   FileSeek(handle,0,SEEK_END);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   if(handle!=INVALID_HANDLE)
     {
      FileWriteString(handle,DoubleToString(Value1),DoubleToString(Value2)+"\n");
      FileClose(handle);
     }
  }
//+------------------------------------------------------------------+
void OnTick()
  {
  }

つまり、最適化パラメータをファイルに書き込むだけで、ハングアップした場合、そのファイルから、パラメータが何であったか、最後のパスを読むことができ、ファイルの時刻は、テスターの「最後の息」の時刻になるのです。

 
Artyom Trishkin:

開発者が明確に答えてくれるでしょうが、私たちはMetaTrader 4について話しているのであって、そこに ...

そして、ここも...何も変わりません。持っているものを使うのです。

 

こんにちは、トレーディングシステムは、特定の条件下で新しい時間足のバーの開始時にのみポジションを開くかどうかを教えてください。現在のバーでストップロスを使用してポジションを閉じると、取引が再び開始されないことを確認する必要があります。私はこのように実装しました。

if (OrdersTotal()==0 && ticket!=-1) // オープンロットはないが、チケットは存在する。

{

if (OrderSelect(ticket,SELECT_BY_TICKET)==true)

{

datetime tct=OrderCloseTime(); // 注文終了時刻

datetime tob=iTime(NULL,PERIOD_H1,0); // 現在のバーのオープン時間

if (tob>tct) // 新規注文を出したローソク足で決済された場合、新規注文を出すことができない。

{

ポジションを開く機能

}


ストラテジーテスターでは、再開したポジションは開かれなくなりましたが、本番の取引ではポジションが開かれます。何が問題なのか教えてください))

 
kmerlin:

こんにちは、トレーディングシステムは、特定の条件下で新しい時間足のバーの開始時にのみポジションを開くかどうかを教えてください。 現在のバーでストップロスを使用してポジションを閉じると、取引が再び開始されないことを確認する必要があります。私はこのように実装しました。

if (OrdersTotal()==0 && ticket!=-1) // オープンロットはないが、チケットは存在する。

{

if (OrderSelect(ticket,SELECT_BY_TICKET)==true)

{

datetime tct=OrderCloseTime(); // 注文終了時刻

datetime tob=iTime(NULL,PERIOD_H1,0); // 現在のバーのオープン時間

if (tob>tct) // 取引が開始されたのと同じバーで決済された場合、新規注文を行うことはできません。

{

ポジションを開く機能

}


ストラテジーテスターでは、再開したポジションは開かれなくなりましたが、本番の取引ではポジションが開かれます。どこが悪いか教えてください)

そうなんですか?

 
Alexander Fedosov:

そうなんですか?


そうでもない私のバリアントでは何が問題なのでしょうか? 主な条件は、現在の時間足ロウソクで再エントリーができないことですとてもシンプルな条件なのに、何が悪くて、なぜうまくいかないのでしょうか?

 
kmerlin:

そうでもない私のバリアントは何が問題なのでしょうか?主な条件は、現在のローソク足で再エントリすることができないということですとてもシンプルな条件なのに、何が悪くて、なぜうまくいかないのでしょうか?

if (OrdersTotal()==0 && ticket!=-1) // Открытых лотов нет но тикет существует

{

if (OrderSelect(ticket,SELECT_BY_TICKET)==true)

{

datetime tct=OrderCloseTime(); // Время закрытия ордера

datetime tob=iTime(NULL,PERIOD_H1,0); // Время открытия бара текущего

if (tob>tct) // Не дает открыть повторный ордер если сделка закрылась на той же свече что и открылась

{

ФУНКЦИЯ ОТКРЫТИЯ ПОЗИЦИИ

}

また、OrderSelectで 選択したチケットは何ですか?

 
Alexander Fedosov:

OrderSelectで選択したのはどのチケットですか?

チケットは最後に送られる...注文が未決済の場合、システム上で新たな注文を出すことはできず、未決済の注文を 出すことはできません。つまり、最後のチケットは、最後のストップまたはプロフィットオーダーということになります。
 
kmerlin:
チケットは最後のオーダーに渡されます。注文が未決済の場合、システム内で新規注文を出すことはできず、未決済の注文も 出すことはできません。つまり、最後のチケットは、ストップまたはプロフィットでの最後の注文です。

ラストオーダーのチケットはどのように渡すのですか?

そして、OrdersTotal()は、未決済注文と保留中の 注文の合計数を渡します。

現在の時間枠の新しいバーです。

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool IsNewBar()
  {
   static datetime prevtime=0;
   if(prevtime==Time[0])
      return(false);
   else
     {
      prevtime=Time[0];
      return(true);
     }
  }
 
Alexander Fedosov:

ラストオーダーのチケットはどのように渡すのですか?

そして、OrdersTotal()は、未決済注文と保留中の 注文の合計数を渡します。

現在の時間枠の新しいバーです。

チケットはグローバル変数として 宣言されています。チケットは売買のために渡されます。私のシステムでは、複数の注文を開くことはできず、開くことができるのは1つの注文のみで、保留中のものもありません。したがって、最後のチケットは、私の理解では、利益またはストップで閉じられた注文です。

よし、頭がこんがらがってきた...明日、あなたのアドバイスをもう一度考えてみるよ。