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

 
Aleksei Stepanenko #:

なぜそのようにするのか、本来はブーリアン関数なのですが。

こんな感じです。

enumの場合、要素は0から始まるので、Ok=0 , AllocError=1。

すなわち、GetRepeat は 0 または 1 を返します。

それぞれGetRepeatは戻り値の否定です

0が偽、1が真です。


頭を壊すのは簡単です

その通り!))ありがとう、アレクセイ!

 
どういたしまして :)
 

ごきげんよう!!!

ここでは、グリッド状に並んだ注文の平均価格を計算し、チャートに表示する関数を紹介します。グリッドを閉じた後、平均線を示す水平線は削除されません。

注文のグリッドが閉じられた後、これらの行が削除されるような関数を書くのを手伝ってください。ありがとうございます!!!

//+----------------------------------------------------------------------------+
//| Расчет среденй цены (0)-buy (1)-sell ()-all                                |
//+----------------------------------------------------------------------------+
double GetAveragePrice(int ot=-1)
  {
   double order_lots = 0, order_price = 0, avg_price = 0;
     {
      for(int i = OrdersTotal()-1; i>=0; i--)
        {
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
           {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
              {
               if(OrderType()==ot||ot<0)
                 {
                  order_lots += OrderLots();
                  order_price += OrderOpenPrice() * OrderLots();
                 }
              }
           }
        }
     }
   avg_price = NormalizeDouble(order_price / order_lots, Digits);

   if(ObjectFind(0,"AveragePriceLine"+IntegerToString(ot))!=0)
      ObjectCreate(0,"AveragePriceLine"+IntegerToString(ot),OBJ_HLINE, 0, 0, avg_price);
   else
      ObjectSetDouble(0,"AveragePriceLine"+IntegerToString(ot),OBJPROP_PRICE,avg_price);
   if(ot==0)
      ObjectSet("AveragePriceLine"+IntegerToString(ot),OBJPROP_COLOR, clrLime);
   if(ot==1)
      ObjectSet("AveragePriceLine"+IntegerToString(ot),OBJPROP_COLOR, clrMagenta);
   return(avg_price);
  }

 
EVGENII SHELIPOV #:

ごきげんよう!!!

ここでは、グリッド状に並んだ注文の平均価格を計算し、チャートに表示する関数を紹介します。グリッドを閉じた後、平均線を示す水平線は削除されません。

注文のグリッドが閉じられた後、これらの行が削除されるような関数を書くのを手伝ってください。ありがとうございます!!!

ここはその場ではありません。

void OnTick()
  {
//---
   if(ObjectFind(0,"AveragePriceLine"+0)==0&&CountTrade(0)<1)//для бай
     {ObjectDelete(0,"AveragePriceLine"+0);}
   if(ObjectFind(0,"AveragePriceLine"+1)==0&&CountTrade(1)<1)//для селл
     {ObjectDelete(0,"AveragePriceLine"+1);}

   .....

  }
 
MakarFX #:

ここはその場ではありません。

Makarさん、void OnTick()でどのようにバインドするのでしょうか?

 
MakarFX #:

ここはその場ではありません。

マカーさん、ありがとうございます!ちょっとファイルを加工すれば大丈夫です。

 

アドバイスをお願いします。

Expert Advisor は、オープンオーダーの開始時刻と終了時刻を設定します。この時間をチャートに表示させたい。まだできていないのです。以下はそのコードです。お願いしたいことがあります!

//-------------------------------------------------------------------+  Команда на открытие первых ордеров в сетке
   if((UseHour==1&&Hour()>=StartTime&&Hour()<=StopTime)||UseHour==0)
   ObjectCreate(0, "Начало торговли", OBJ_VLINE,0,0, StartTime);
   ObjectSetInteger(0, "Начало торговли",OBJPROP_COLOR, clrBlue);
   ObjectCreate(0,"Окончание торговли", OBJ_VLINE, 0, 0, StopTime);
   ObjectSetInteger(0, "Окончание торговли", OBJPROP_COLOR, clrBlue);
     {
      if(CountTrade(0)==0 && CountTrade(1)==0 && TradeSignal()==0)
         SendFirsOrder(0);
      if(CountTrade(1)==0 && CountTrade(0)==0 && TradeSignal()==1)
         SendFirsOrder(1);
     }
 
EVGENII SHELIPOV #:

アドバイスをお願いします。

Expert Advisor は、オープンオーダーの開始時刻と終了時刻を設定します。この時間をチャートに表示させたい。まだできていないのです。以下はそのコードです。お願いしたいことがあります!

StartTimeとStopTimeの変数を表示する
 
MakarFX #:
StartTimeとStopTimeの変数を表示します。
extern string               TIME                           = "Настройки времени";
extern int                  UseHour                        = 1;         // Торговля в установленное время "0"-ВЫКЛ, "1"-ВКЛ
extern int                  StartTime                      = 1;         // Начало торговли
extern int                  StopTime                       = 19;        // Окончание торговли
 
EVGENII SHELIPOV #:
   if((UseHour==1&&Hour()>=StartTime&&Hour()<=StopTime)||UseHour==0)
     {
      if(ObjectFind(0,"Начало торговли"+TimeToString(Time[0],TIME_DATE))!=0)
        {
         ObjectCreate(0,"Начало торговли"+TimeToString(Time[0],TIME_DATE),OBJ_VLINE,0,Time[0]+(StartTime*3600),0);
         ObjectSetInteger(0,"Начало торговли"+TimeToString(Time[0],TIME_DATE),OBJPROP_COLOR, clrBlue);
         ObjectCreate(0,"Окончание торговли"+TimeToString(Time[0],TIME_DATE),OBJ_VLINE,0,Time[0]+(StopTime*3600),0);
         ObjectSetInteger(0,"Окончание торговли"+TimeToString(Time[0],TIME_DATE),OBJPROP_COLOR, clrBlue);
        }
      if(CountTrade(0)==0 && CountTrade(1)==0 && TradeSignal()==0)
         SendFirsOrder(0);
      if(CountTrade(1)==0 && CountTrade(0)==0 && TradeSignal()==1)
         SendFirsOrder(1);
     }