MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1337

 
sibiriyak73:

どこが間違いなのか?

登場人物が多いということは、「開き」が多いということです。

struct Orders
   {
   string symbol;
   bool open;
   } orders[];

int OnInit()
   {
   ArrayResize(orders,2);
   orders[0].symbol="EURUSD";
   orders[0].open=false;
   orders[1].symbol="USDJPY";
   orders[1].open=false;
   return(INIT_SUCCEEDED);
   }

void OnTick()
   {
   for(int i=0; i<2; i++)
      {
      if(!orders[i].open)
         {
         int ticket1=OrderSend(orders[i].symbol,OP_SELLSTOP,1.5,limit1,10,SL1,TP1,NULL,0,0,clrRed);  //Здесь открываем
         orders[i].open=true;
         }
      }
........


 
Aleksei Stepanenko:

登場人物が多いということは、「開き」が多いということです。

ありがとう、相棒。どのように作ればいいのか 一日一取引 他の楽器を無視して、現在の楽器を引きちぎる(EAが複数の楽器で立ち上がる)。
 
sibiriyak73:
ありがとう、相棒。作り方 一日一売買 現在のシンボルで引き裂き、他の楽器を無視する(EAは複数のシンボルに立つ)

- マジックナンバーとシンボルで注文履歴 を調べ、もし注文の開始(または終了?)時刻が現在の日付と一致したら、OnTick()を終了します。

- TF D1の "新しいバー "をコントロールする。


最初の方法 - より多くの書き込みが、テスターでは、MT4は非常に高速に動作します。2番目の方法 - 3行のコードが、テスターでは、ハードドライブとテスト時間を "かみ "になります長い

 
sibiriyak73:
(EAがいくつかの楽器の上に立つ)

ああ、なるほど、複数の楽器にEAが立っているなら、注文がEAのものであることのチェックを追加すればいいんですね。

int OPEN=1;

int total=OrdersTotal();
for(int i=0; i<total; i++)
   {
   if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderCloseTime()==0 && OrderSymbol()==Symbol())
      {
      OPEN=0;
      break;
      }
   }

if(OPEN==1)
   {
   int ticket1=OrderSend(Symbol(),OP_SELLSTOP,1.5,limit1,10,SL1,TP1,NULL,0,0,clrRed);  //Здесь открываем
   }
 
Aleksei Stepanenko:

ああ、なるほど、複数の楽器にEAがあるのなら、注文がEAに属するというチェックを追加すればいいんですね。

このコードは、膨大な数のお得な 情報を開くことができます。アイデアは正しいが、それをどう正しく実装するか。

 
sibiriyak73:

このコードで、膨大な数のトレードを 開くことができます。アイデアは正しいのですが、それをどう正しく実装するか。

これが 必要です

関数 isTradeToDay()。

この関数は、今日の取引フラグを返します。

Только "Полезные функции от KimIV".
Только "Полезные функции от KimIV".
  • 2011.02.18
  • www.mql5.com
Все функции взяты из этой ветки - http://forum.mql4...
 

ここにあるコードの一部から、何が推測できるでしょうか?

1日1回まで、チェックを入れてください。

datetime last_time=0;   
MqlDateTime date1, date2; 

void OnTick()
   {
   int OPEN=1;

   int total=OrdersTotal();
   for(int i=0; i<total; i++)
      {
      if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderCloseTime()==0 && OrderSymbol()==Symbol())
         {
         OPEN=0;
         break;
         }
      }
      
   TimeToStruct(last_time,date1);
   TimeToStruct(iTime(Symbol(),0,0),date2);
   if(date1.day==date2.day)
      {
      OPEN=0;
      }

   if(OPEN==1)
      {

      int ticket1=OrderSend(Symbol(),OP_SELLSTOP,1.5,limit1,10,SL1,TP1,NULL,0,0,clrRed);  //Здесь открываем
      if(ticket1>=0 && OrderSelect(ticket1,SELECT_BY_TICKET,MODE_TRADES))
         {
         last_time=OrderOpenTime();
         }
      }

 
sibiriyak73:

みんなは、ツールで1日1トレードを開くために、アドバイザーの必要性を助ける。

これを試してみてはいかがでしょうか

datetime dt = iTime(_Symbol,PERIOD_D1,0);

   for(int i = 0; i < OrdersHistoryTotal(); i++) 
    {
     if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
      {
       if((OrderSymbol() != _Symbol) && (dt < OrderCloseTime())
        {
         Открываем ордер;
        }
      }
    }
 
MakarFX:

これを試してみてはいかがでしょうか。

すべて昔書いたものです.遥か昔に

このコードは、今日すでに終了している場合に備えて、何がすでに市場に出ているか、何が履歴に残っているかをチェックします。

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает флаг торгов сегодня.                                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isTradeToDay(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (TimeDay  (OrderOpenTime())==Day()
              &&  TimeMonth(OrderOpenTime())==Month()
              &&  TimeYear (OrderOpenTime())==Year()) return(True);
            }
          }
        }
      }
    }
  }
  k=OrdersTotal();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (TimeDay  (OrderOpenTime())==Day()
              &&  TimeMonth(OrderOpenTime())==Month()
              &&  TimeYear (OrderOpenTime())==Year()) return(True);
            }
          }
        }
      }
    }
  }
  return(False);
}
 
Aleksei Stepanenko:

ここにあるコードの一部から、何が推測できるでしょうか?

1日1回まで、チェックを入れてください。

ごあいさつ問題は、EAが口座内の未決済取引を確認すると、それ以上取引を開始しないことです。口座に未決済の取引があるのに、どうしてこんなことをさせるんだ」という感じです。私は彼に、このEAはいくつかのシンボルで開いているので、このツールで 複数の取引(例えばEUR USD)を開いてはいけないと説明しなければなりません。すべてのコードを表示するのは間違っていると思います(宣言された変数などが ある大きなコードです)。