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

 
Valeriy Yastremskiy:

フラグは、注文の種類の 数を制御するか、チケットがある場合は成行注文の終了時間を制御し、0に等しくない場合は、注文が終了し、注文開始フラグは偽となります。

また、プログラム的にはどのように?
 
AIGUL SALMANOVA:
プログラム的にはどうなんでしょうか?
 if(OrderSelect(Ticket, SELECT_BY_TICKET)==true)
        {
         if(OrderCloseTime()==0)              // Если наш рыночный ордер не закрыт
           {
            if(flagAlert == true)
               Alert("Наш рыночный ордер жив, Модифицируем его если нужно ", Text,Ticket,". Ждём ответ..");

            ModifyTral(); // Модифицируем если нужно
           }
         if(OrderCloseTime()!=0)              // Если наш рыночный ордер закрылся
           {
            OpnOr=false;                     // Флаг открытия рыночного ордера после его закрытия делаем ЛОЖЬ
            Ticket=0;                          // Тикет ордера рыночного, он может быть только один
           
            Alert("Наш рыночный ордер закрылся. Работа Советника продолжается ","Прибыль/убыток = ",OrderProfit(),
                  " Своп = ", OrderSwap(), " Комиссия = ", OrderCommission());
            return;
           }
        }
      else
        { Alert("OrderSelect() нашего рыночного ордера вернул ошибку - ",GetLastError()); return;}
     }

チケットの会計処理をすること。

注文を開く際に、チケットを記憶させる必要があります。

 Alert("Попытка открыть Buy Ожидание ответа..","SL = ",SL,"TP = ",TP,"Lts = ",Lts);
            Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,slippage,SL,TP,"QstrBuy",Magic,0,Blue);//Открытие Buy
            if(Ticket>0) // Получилось :)
              {
               Alert(Symbol(),"Открыт ордер Buy по цене ",Ask,"Ticket = ",Ticket);}
 
Valeriy Yastremskiy:

正直なところ、何を求めているのか不明です。何が出力され、何が必要かをどう理解するか、数式で書く。

最後の4つのティックの間のミリ秒単位の時間が必要です。新しいティックが表示されたら、値を更新する。

このインディケータは、最後のティックの時間(GetTickCount())をバッファに書き込みます。

Expert Advisorは、インジケータから値を取得し、時差を計算します。

double buf1=iCustom(Symbol(),0,"time",0,1);
double buf2=iCustom(Symbol(),0,"time",0,2);
double buf3=iCustom(Symbol(),0,"time",0,3);
double buf4=iCustom(Symbol(),0,"time",0,4);
double delta1=buf1-buf2;
double delta2=buf2-buf3;
double delta3=buf3-buf4;
Alert(delta1,"   ",delta2,"   ",delta3);

カウントされるようですが、Alertは画像のような値を表示します。

その理由がわからない。


 
prom18:

直近の4ティック間の時間をミリ秒単位で知りたい。新しいティックが発生したときに値を更新します。

このインディケータは、最後のティックの時間(GetTickCount())をバッファに書き込んでいます。

Expert Advisorは、インジケータから値を取得し、時差を計算します。

カウントされるようですが、Alertは画像のような値を表示します。

その理由がわからない。


ドキュメントを読んでないから

GetTickCountの ヘルプに、整数カウンタのオーバーフローと書いてある

 
Maxim Kuznetsov:

ドキュメントを読まないからです。

GetTickCountのリファレンスによると、整数のオーバーフローだそうです。

uintのことですか?なぜアラートで表示されるのですか?置いてませんよ。

 
prom18:

uintのことですか?なぜアラートで表示されるのですか?そこには書いていない。

最初のAlerteでは、(オーバーフローを考慮せずに)間違った差分を計算して出力しています。

2番目のAlertでは、大きな整数値がコードで探されていますが、この断片には存在しません :-)

 

それが、コードにないんです。

すべてのインジケーターコード

#property  indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Aqua
double x[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorBuffers(1);
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,x);
   SetIndexDrawBegin(0,0);
   SetIndexLabel(0,"x");
   SetIndexShift(0,0);
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   uint b=GetTickCount();
   x[0]=b;
   Alert(b);
   for(int j=ArraySize(x)-1;j>=1;j--){x[j]=x[j-1];}
   return(0);
  }
//+------------------------------------------------------------------+

EAコードのすべて。

#property copyright ""
#property link      ""
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- 
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   uint buf1=iCustom(Symbol(),0,"time",0,1);
   uint buf2=iCustom(Symbol(),0,"time",0,2);
   uint buf3=iCustom(Symbol(),0,"time",0,3);
   uint buf4=iCustom(Symbol(),0,"time",0,4);
   uint delta1=buf1-buf2;
   uint delta2=buf2-buf3;
   uint delta3=buf3-buf4;
   Alert(delta1,"   ",delta2,"   ",delta3);  
  }
//+------------------------------------------------------------------+
Документация по MQL5: Константы, перечисления и структуры / Именованные константы / Предопределенные макроподстановки
Документация по MQL5: Константы, перечисления и структуры / Именованные константы / Предопределенные макроподстановки
  • www.mql5.com
//| Expert initialization function                                   | //| Expert deinitialization function                                 | //| Expert tick function                                             | //| test1                                                            |...
 
prom18:

それが、コードにないんです。

すべてのインジケーターコード

そのすべてを。

他に何が入っているか見てみましょう。

time.mq4 - 多分、アラートを送信します。

 
prom18:

それが、コードにないんです。

すべてのインジケーターコード

EAコードのすべて。

インジケータでは、Alert構造で。下から5行目Alert(b)。

uint b=GetTickCount();
   x[0]=b;
   Alert(b);

これはシステム起動からのミリ秒数 らしい)

 

クイックトレードボタンの状態を把握する方法は?

つまり、チャート上に存在するかしないかです。

関数や別の方法を提案してもらえますか?