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

 
Alexandr Sokolov #:


2) 配列が逆インデックスの場合、新しいセルは配列の最初に現れるはずだが、そうではない

なぜ新しいセルは配列の先頭に表示されなければならないのでしょうか?- ArraySetAsSeries()を使用した場合、配列は物理的にメモリ上に再割り当てされませんが、配列要素にアクセスする際にリバースインデックスが適用されることが、ヘルプに書かれているはずですが、間違っていますか?

SZZ:あなたの例は複雑なので、スケッチしてみました。

#property strict
//+------------------------------------------------------------------+
void OnStart()
{
   int arr1[] = {1, 2, 3, 4, 5};
   int arr2[] = {1, 2, 3, 4, 5};
   ArraySetAsSeries(arr2, true);
   Print("Start size : ", ArraySize(arr1), " , ", ArraySize(arr2));
   Print("Resize : ", ArrayResize(arr1, 10), " , ", ArrayResize(arr2, 10));
   string s1 = "", s2 = "";
   for(int i = 0, j = 0; i < ArraySize(arr1) && j < ArraySize(arr2); i++, j++)
   {
      s1 += (string)arr1[i] + " , ";
      s2 += (string)arr2[j] + " , ";
   }
   Print("arr1 = ", s1);
   Print("arr2 = ", s2);
}

2022.04.18 21:31:59.223 tst EURUSD,H1: arr2 = 5 , 4 , 3 , 2 , 1 , 0 , 0 , 0 , 0 , 0 ,

2022.04.18 21:31:59.223 tst EURUSD,H1: arr1 = 1 , 2 , 3 , 4 , 5 , 0 , 0 , 0 , 0 , 0 ,

2022.04.18 21:31:59.223 tst EURUSD,H1: Resize : 10 , 10

2022.04.18 21:31:59.223 tst EURUSD,H1: 開始サイズ : 5 , 5

 
MT5でどのように動作するか教えてください。
iClose(NULL,PERIOD_CURRENT,shift)

iClose」エラーが発生しました - オーバーロードされた関数へのあいまいな呼び出しです。

一般的には、TFを選択することが目的です。

癖でMT4で選びたかったのですが

if(iClose(NULL, TF(), 1) < iOpen(NULL, TF(), 1))

int TF()
  {
   int tf;
   switch(TF)
     {
      case 1 :
         tf = 1;
         break;
      case 2 :
         tf = 5;
         break;
      case 3 :
         tf = 15;
         break;
      case 4 :
         tf = 30;
         break;
      case 5 :
         tf = 60;
         break;
      case 6 :
         tf = 240;
         break;
      case 7 :
         tf = 1440;
         break;
      case 8 :
         tf = 10080;
         break;
      case 9 :
         tf = 43200;
         break;
      default:
         tf = 10;
         Print(tf);
     }
   return(tf);
  }

しかし、私は失敗した(

 
Александр iClose」エラーが発生しました - オーバーロードされた関数へのあいまいな呼び出しです。

一般的には、TFを選択することが目的です。

癖でMT4で選びたかったのですが

でも、失敗しました。

MT5での期間

if(Period()==1) return "M1";

if(Period()==2) return "M2";

if(Period()==3) return "M3";

if(Period()==4) return "M4";

if(Period()==5) return "M5";

if(Period()==6) return "M6";

if(Period()==10) return "M10";

if(Period()==12) return "M12";

if(Period()==15) return "M15";

if(Period()==20) return "M20";

if(Period()==30) return "M30";

if(Period()==16385) return "H1";

if(Period()==16386) return "H2";

if(Period()==16387) return "H3";

if(Period()==16388) return "H4";

if(Period()==16390) return "H6";

if(Period()==16392)は "H8 "を返す。

if(Period()==16396) return "H12";

if(Period()==16408) return "Daily";

if(Period()==32769) return "Weekly";

if(Period()==49153) return "Monthly";

 
Andrei Sokolov #:

mt5 の期間

if(Period()==1) return "M1";

if(Period()==2) return "M2";

if(Period()==3) return "M3";

if(Period()==4) return "M4";

if(Period()==5) return "M5";

if(Period()==6) return "M6";

if(Period()==10) return "M10";

if(Period()==12) return "M12";

if(Period()==15) return "M15";

if(Period()==20) return "M20";

if(Period()==30) return "M30";

if(Period()==16385) return "H1";

if(Period()==16386) return "H2";

if(Period()==16387) return "H3";

if(Period()==16388) return "H4";

if(Period()==16390) return "H6";

if(Period()==16392)は "H8 "を返す。

if(Period()==16396) return "H12";

if(Period()==16408) return "Daily";

if(Period()==32769) return "Weekly";

if(Period()==49153) return "Monthly";

ありがとうございました。

 
Александр #:

ありがとうございました。

ENUM_TIMEFRAMESが 好きではないのですか?

しかも、入力に列挙形式で変数を入れて、好きなように選択できる...なぜ、そんな面倒なことをしなければならないのか。 しかも、mql4ではこの列挙はずっと以前から可能だった..........。

Документация по MQL5: Константы, перечисления и структуры / Константы графиков / Периоды графиков
Документация по MQL5: Константы, перечисления и структуры / Константы графиков / Периоды графиков
  • www.mql5.com
Периоды графиков - Константы графиков - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov #:

ENUM_TIMEFRAMESが 好きではないのですか?

しかも、入力に変数を列挙して、好きなように選択できる...なんでこんな面倒なことをするんだ? しかも、mql4ではこの列挙はずっと前から可能だった...。

+

 
Alexey Viktorov #:

ENUM_TIMEFRAMESが 好きではないのですか?

しかも、入力に列挙形式で変数を入れて、好きなように選択できる...なぜ、そんな面倒なことをしなければならないのか。 しかも、mql4ではこの列挙もずっと前から可能だった.........。

ありがとうございました。全く知りませんでした。

 

同僚は、現在の価格に最も近い以前に配置された指値注文の価格を見つけるための最良のアルゴリズムをアドバイスしてください - それぞれに入札に、昇順売り指値に

底値に最も近い買い指値。

このf-iioは数量をカウントしているが、f-iioを返すためには、前に出した指値注文の価格が必要だ...。


今のところ、売り指値は最低価格、買い指値は最高価格を使っていますが・・・。

int Price_of_orders(int Magic_) // цена ближайшего ордера к цене по магику
  {
//--- получим общее количество ордеров
   int ord = 0; // итоговое значение кол-ва ордеров
   int orders=OrdersTotal();
//--- пробежим по списку ордеров
   for(int i=0;i<orders;i++)
     {
      ResetLastError();
      //--- скопируем в кэш ордер по его номеру в списке
      ulong ticket=OrderGetTicket(i);
      if(ticket!=0)// если ордер успешно скопирован в кэш, работаем с ним
        {
         double price_open  =OrderGetDouble(ORDER_PRICE_OPEN);
         datetime time_setup=OrderGetInteger(ORDER_TIME_SETUP);
         string symbol      =OrderGetString(ORDER_SYMBOL);
         long magic_number  =OrderGetInteger(ORDER_MAGIC);
         if(magic_number==Magic_)
           {
            //  обработаем ордер с заданным ORDER_MAGIC - посчитаем
            ord++;
           }
         PrintFormat("Ордер #%d по %s был выставлен %s, ORDER_MAGIC=%d",ticket,symbol,TimeToString(time_setup),magic_number);
        }
      else         // вызов OrderGetTicket() завершился неудачно
        {
         PrintFormat("Ошибка при получении ордера из списка в кэш. Код ошибки: %d",GetLastError());
        }

     }
   return (ord);   
  }
 
Roman Shiredchenko #:

同僚は、現在の価格に最も近い以前に配置された指値注文の価格を見つけるための最良のアルゴリズムをアドバイスしてください - それぞれに入札に、昇順売り指値に

底値に最も近い買い指値。

このf-iioは数量をカウントしているが、f-iioを返すためには、前に出した指値注文の価格が必要だ...。


今のところ、売り指値は最低価格、買い指値は最高価格を使っています...。

私は、必要な価格とチケット、そして多分何か他のもの、例えば時間を、私の構造体または配列に保存し、価格によって追加した後すぐにソートしたいのです。リソース別では、あまり検索しないのであれば同じか少し高いくらい、よく検索するのであれば覚えておくとよいでしょう。もちろん、100500件の注文がない場合は)それでは高すぎるかもしれません。一般に、構造体や多次元配列のソートは、残念ながら最初のインデックスに対してのみ解決されます。

同じインデックス、チケット、時間、価格を持つ複数の一次元配列を使うこともあります。また、必要なプロパティのインデックスで検索します。もちろん、松葉づえではあるが、明確に機能する。

 

検索しても出てこない、疑問が生じた。EAからアルゴトレードを有効にすることは可能ですか?端末のプロパティを 取得し、有効かどうかを判断します。

また、1つのターミナルで1つのEAをalgotradingを有効にして実行し、別のEAを無効にすることは可能でしょうか。