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

 

こんにちは。

再同期せずにvpcで EAを管理する方法を教えてください。

つまり、ターミナル上では、チャート上にボタンを配置し、再同期することなくモードを変更することができるのです。ボットを使ってPPC上のEAにコマンドを与えることはできますか?

それとも、再同期なしでmql vpsのEAモードを変更するために他の代替手段を使用するべきですか?


返信ありがとうございました !

 

専門家の皆さん、こんにちは。

この問題を解決するためにご協力をお願いします。

どのペアをテストしてもすべて正常に動作しますが、他の通貨で作業する場合、保留中の注文が 置かれず(保留中の注文を公開する必要があります)、利食いトリガーの後に閉じません。

可能であれば、コードを変更する方法をアドバイスしてください。

bool operation=0;for(int pos=0;pos<OrdersTotal();pos++)
     {if ( OrderSelect (pos, SELECT_BY_POS) == false )  continue;
      if ( OrderSymbol()==Symbol()) break;}


//=========================================================================================================
if(Hour()>=2&&Hour()<=18&&operation==0){
if(OPB1==1)
   {operation=1;if(operation==0 &&OrderSymbol()!=Symbol()||OrdersTotal()==0)
        {OrderSend(Symbol(),OP_BUY,lots,Ask,0,Bid-ss*Point,Ask+T*Point,"My order#",mn,0,Green);}}
        if (OrderType()==OP_BUY &&OrdersTotal()==1&&OrderMagicNumber()==8)
        {OrderSend(Symbol(),OP_SELLSTOP,5*lots,OrderOpenPrice()-(ss-ss/4)*Point,0,0,SstopClose,"My order#",80,0,Red);}
       

if(OPS1==1)
   {operation=1;if(operation==0 &&OrderSymbol()!=Symbol()||OrdersTotal()==0)        
         {OrderSend(Symbol(),OP_SELL,lots,Bid,0,Ask+ss*Point,Bid-T*Point,"My order#",mn,0,Red);}}
         if (OrderType()==OP_SELL &&OrdersTotal()==1&&OrderMagicNumber()==8)
         {OrderSend(Symbol(),OP_BUYSTOP,5*lots,OrderOpenPrice()+(ss-ss/4)*Point,0,0,BstopClose,"My order#",80,0,Green);}}



if(OrderMagicNumber()==80){operation=0;
 {for( int  ii=OrdersTotal()-1;ii>=0;ii--)
       {OrderSelect(ii, SELECT_BY_POS);
        int  type   = OrderType();bool result = false;
        switch(type)
         {case OP_BUYSTOP   : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red );//break;
          case OP_SELLSTOP  : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red ); //break;
         
          result = OrderDelete( OrderTicket() );//break;
          }}}}
 

こんにちは フォーラムユーザーの皆様。

チャート上にゾーンを構築するインジケーターの改良をお願いします。

現在のインジケーターでは、ゾーンはすべての曜日に設定されています。

曜日 ごとにゾーンを分けて設定できるようにしてほしい。

//+------------------------------------------------------------------+
//|                                            2 ЗОНЫ.mq4            |
//|                                                                  |
//|                                                                  |
//|                                                                  |
//|  2017                                                            |
//+------------------------------------------------------------------+

#property indicator_chart_window

//------- Внешние параметры индикатора -------------------------------
extern int    NumberOfDays = 150;        // Количество дней
extern string Begin_1      = "03:00";
extern string End_1        = "08:00";
extern color  Color_1      = PowderBlue;
extern string Begin_2      = "09:00";
extern string End_2        = "16:30";
extern color  Color_2      = Yellow;
extern bool   HighRange    = true;


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void init() {
  DeleteObjects();
  for (int i=0; i<NumberOfDays; i++) {
    CreateObjects("PWT1"+i, Color_1);
    CreateObjects("PWT2"+i, Color_2);
  }
  Comment("");
}

//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
void deinit() {
  DeleteObjects();
  Comment("");
}

//+------------------------------------------------------------------+
//| Создание объектов индикатора                                     |
//| Параметры:                                                       |
//|   no - наименование объекта                                      |
//|   cl - цвет объекта                                              |
//+------------------------------------------------------------------+
void CreateObjects(string no, color cl) {
  ObjectCreate(no, OBJ_RECTANGLE, 0, 0,0, 0,0);
  ObjectSet(no, OBJPROP_STYLE, STYLE_SOLID);
  ObjectSet(no, OBJPROP_COLOR, cl);
  ObjectSet(no, OBJPROP_BACK, True);
}

//+------------------------------------------------------------------+
//| Удаление объектов индикатора                                     |
//+------------------------------------------------------------------+
void DeleteObjects() {
  for (int i=0; i<NumberOfDays; i++) {
    ObjectDelete("PWT1"+i);
    ObjectDelete("PWT2"+i);
  }
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
void start() {
  datetime dt=CurTime();

  for (int i=0; i<NumberOfDays; i++) {
    DrawObjects(dt, "PWT1"+i, Begin_1, End_1);
    DrawObjects(dt, "PWT2"+i, Begin_2, End_2);
    dt=decDateTradeDay(dt);
    while (TimeDayOfWeek(dt)>5) dt=decDateTradeDay(dt);
  }
}

//+------------------------------------------------------------------+
//| Прорисовка объектов на графике                                   |
//| Параметры:                                                       |
//|   dt - дата торгового дня                                        |
//|   no - наименование объекта                                      |
//|   tb - время начала сессии                                       |
//|   te - время окончания сессии                                    |
//+------------------------------------------------------------------+
void DrawObjects(datetime dt, string no, string tb, string te) {
  datetime t1, t2, t3;
  double   p1, p2, p3;
  int      b1, b2;

  t1=StrToTime(TimeToStr(dt, TIME_DATE)+" "+tb);
  t2=StrToTime(TimeToStr(dt, TIME_DATE)+" "+te);
  t3=StrToTime(TimeToStr(dt, TIME_DATE)+" ""23:00");
  b1=iBarShift(NULL, 0, t1);                            //Поиск бара по времени
  b2=iBarShift(NULL, 0, t2);
  p1=High[iHighest(NULL, PERIOD_M5, MODE_HIGH, b1-b2, b2)];  // 
  p2=Low [iLowest (NULL, PERIOD_M5, MODE_LOW , b1-b2, b2)]; // 
  p3=p2;
  if (!HighRange) {p1=0; p2=2*p2;}
  ObjectSet(no, OBJPROP_TIME1 , t1);
  ObjectSet(no, OBJPROP_PRICE1, p1);
  ObjectSet(no, OBJPROP_TIME2 , t2);
  ObjectSet(no, OBJPROP_PRICE2, p2);
  ObjectSet(no, OBJPROP_TIME2 , t3);
  ObjectSet(no, OBJPROP_PRICE2, p3);
}

//+------------------------------------------------------------------+
//| Уменьшение даты на один торговый день                            |
//| Параметры:                                                       |
//|   dt - дата торгового дня                                        |
//+------------------------------------------------------------------+
datetime decDateTradeDay (datetime dt) {
  int ty=TimeYear(dt);
  int tm=TimeMonth(dt);
  int td=TimeDay(dt);
  int th=TimeHour(dt);
  int ti=TimeMinute(dt);

  td--;
  if (td==0) {
    tm--;
    if (tm==0) {
      ty--;
      tm=12;
    }
    if (tm==1 || tm==3 || tm==5 || tm==7 || tm==8 || tm==10 || tm==12) td=31;
    if (tm==2) if (MathMod(ty, 4)==0) td=29; else td=28;
    if (tm==4 || tm==6 || tm==9 || tm==11) td=30;
  }
  return(StrToTime(ty+"."+tm+"."+td+" "+th+":"+ti));
}
//+------------------------------------------------------------------+

ファイル:
2_aqi4.ex4  17 kb
2_mne7.mq4  11 kb
 
Maxim Kuznetsov:

if (OrdersTotal()==0)...」という条件を削除する。- 注文がないときにだけ、エントリーを検索し、新規注文を出すということです。

もし、そのような条件なしに新規注文の大きなパックが開くことを避けたいのであれば、追加の条件を提示する必要があります。これは、前の注文から時間T以内に新しい注文を出さない、バーを制御する、注文間の距離をpipsで維持する、などの戦略によって異なります。

了解です、ありがとうございます)

 
MT5で、ストラテジーテスターで 見るような、リアル口座での取引結果をチャートで提示することは可能ですか?
Тестирование стратегий - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
Тестирование стратегий - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
  • www.metatrader5.com
Тестер стратегий позволяет тестировать и оптимизировать торговые стратегии (советники) перед началом использования их в реальной торговле. При тестировании советника происходит его однократная прогонка с начальными параметрами на исторических данных. При оптимизации торговая стратегия прогоняется несколько раз с различным набором параметров...
 

みんな、特に開発者の皆さん、この問題を解決することが可能かどうか、教えてください。写真の中のタスク


 

こんにちは、「型変換によりデータが失われる可能性が あります」という警告が変数nのハイライトされた場所に表示されます

// Переводим строку в верхний регистр
string StringUpper(string s) {
  int c, i, k=StringLen(s), n;
  for (i=0; i<k; i++) {
    n=0;
    c=StringGetChar(s, i);
    if (c>96 && c<123) n=c-32;    // a-z -> A-Z
    if (c>223 && c<256) n=c-32;   // а-я -> А-Я
    if (c==184) n=168;            //  ё  ->  Ё
    if (n>0) s=StringSetChar(s, i, n);
  }
  return(s);
}

修正方法を教えてください。

 
Sergey:

こんにちは、「型変換によりデータが失われる可能性が あります」という警告が変数nのハイライトされた場所に表示されます

修正方法を教えてください。

ushort n=0のどちらか。

または StringSetChar(s, i, (ushort)n);

しかし、StringSetCharacter() を使用する方が良いでしょう。

Документация по MQL5: Строковые функции / StringSetCharacter
Документация по MQL5: Строковые функции / StringSetCharacter
  • www.mql5.com
Если значение pos меньше длины строки и значение символьного кода = 0, то строка усекается (но размер буфера, распределенного под строку остается неизменным). Длина строки становится равной значению pos.
 
このサイトには、記事をお気に入りに登録する機能はありますか?
テーマの場合はどうなっているのでしょうか。
 

午後

多通貨のExpert Advisorで、オープンポジションがトリガーされたときに、利益に対して発注された保留中の注文を 閉じる必要があります。

今現在、利益確定の保留注文を決済すると、全通貨の保留注文が決済されます。

ある通貨ペアにリンクしている保留中の注文だけが閉じ、残りは開いたままになるようにコードを変更するにはどうしたらよいですか?

このコードのどこを変えればいいのでしょうか?

if(OrderMagicNumber()==Mn){operation=0;
 {for( int  i=OrdersTotal()-1;i>=0;i--)
       {OrderSelect(i, SELECT_BY_POS);
        int  type   = OrderType();bool result = false;
        switch(type)
         {case OP_BUYSTOP   : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red );//break;
          case OP_SELLSTOP  : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red ); //break; 
          
          result = OrderDelete( OrderTicket() );//break;
          }}}}

このコード内のMnは、BUY_STOPまたはSELL_STOPの保留中の注文のマジックナンバーです。

ロジックとしては、Take Profitでオープンポジションを決済すると、このマジックナンバーが残り、これを削除するコマンドが実行されることになっています。

これは、各ペアをテストするときに有効です。ただし、他の通貨を扱う場合は、すべてのペアで発注された注文が削除されます。

できる人、助けてください。

この問題で悩む人がいないことは理解していますが、もしかしたら誰かが用意したテンプレートがあるのでは?

とてもありがたいことです。