mql5言語の特徴、微妙なニュアンスとテクニック - ページ 109

 
Taras Slobodyanik:

論理的 - それはクーデターです。

論理性を評価せず、情報を書き込んだ。もし影響を受けていれば、PositionIDも同じように変化しているはずです。

今も変わりません。これがバグなら最高なんだけどなー。


だから質問です。 DEAL_ENTRY_INOUTトランザクションは、PositionIDをDEAL_ORDERに変更する必要がありますか?

そうすべきだと思います。この挙動は非常に便利/正しいでしょう。
 
fxsaber:

ロジックを評価せずに情報を書き込んだ。ただし、影響を受ける場合は、PositionIDも同じように変化しているはずです。

今も変わりません。これがバグなら最高なんだけどなー。


だから質問です。 DEAL_ENTRY_INOUTトランザクションは、PositionIDをDEAL_ORDERに変更する必要がありますか?

ないと書いてある。https://www.mql5.com/ru/docs/constants/tradingconstants/positionproperties#enum_position_property_integer

それ以前はそう書かれていて、ポジションIDが変更されていましたが。

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства позиций
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства позиций
  • www.mql5.com
Тикет позиции. Уникальное число, которое присваивается каждой вновь открытой позиции. Как правило, соответствует тикету ордера, в результате которого она была открыта, за исключением случаев изменения тикета в результате служебных операций на сервере. Например, начисления свопов переоткрытием позиции. Для нахождения ордера, которым была открыта...
 
Andrey Barinov:

ないと書いてある。https://www.mql5.com/ru/docs/constants/tradingconstants/positionproperties#enum_position_property_integer

おそらく、それには何か正当な理由があるのでしょう。私の目から見ると、まったく違和感がありません。

以前はそう書かれていて、Position IDが変更されたのですが。

開発者の方々に、状況を明らかにしていただくようお願いします。PositionIDが変更されると、その後5回フリップした後、ポジションビューの取引履歴タブに5つのポジションが表示されます。

現在では(フリップ中にPositionIDは変化しない)常に1つのポジションのみが表示されます。これは、大げさに言えば、おかしな解決方法です。

 

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

MetaTrader 5 build 1930の新バージョン:MQL5におけるフローティング・チャート・ウィンドウと.Netライブラリ

fxsaber さん 2018.11.09 16:19

by real ticks "モードでは、テスターはティックの到着時に独立してバーを生成します。このため、ターミナルとテスターでカスタムシンボルのバー履歴が全く異なる場合があります。

 
EAをコンパイルした後、このEAがテスターで 選択されていた場合、テスターの設定が リセットされることがよくあります。これははっきり言って迷惑です。コンパイルのたびに、Expert Advisorsのツリーに移動して、EAを検索する必要があります。知らない人がいたら、テスターがリセットされないようにするレシピがあるんだ。Expert Advisor をデバッグモードで一度実行する必要があります - ヒストリー上で CTRL+F5.その後、再コンパイルしても、テスターの設定には影響しません。
 
fxsaber:
このExpert Advisorが以前に選択されていた場合、コンパイル後にテスターの設定が リセットされることが多いことに気づきました。これははっきり言って迷惑です。コンパイルのたびに、Expert Advisorsのツリーに移動して、EAを検索する必要があります。知らない人がいたら、テスターがリセットされないようにするレシピがあるんだ。Expert Advisor をデバッグモードで一度実行する必要があります - ヒストリー上で CTRL+F5.その後、再コンパイルしても、テスターの設定には影響しません。


同じです!昨日気づきました。

新しいバージョン(新しいファイル名)をコンパイルした後、ターミナルを再起動する必要があることを修正しました。-mqlcacheを更新して いないのかもしれません。

その後、テスターはコンパイル中に前のファイルにリセットされることはありません。


この問題は以前にも何度か発生し、その後消滅しています。そして、再び現れたのは...。

Z.I.さんの言葉の意味を読み取れず、質問というよりアドバイスになってしまいましたが......。

 
このトピックに関係のないコメントは、「MQL4に関する初心者の質問、アルゴリズムやコードに関するヘルプや議論」に移動しました。
 

履歴のダウンロードスクリプトを確認...

凍死してしまうのは私だけでしょうか?スクリプトは、ヘルプから引用しています...

//+------------------------------------------------------------------+ 
//|                                              TestLoadHistory.mq5 | 
//|                        Copyright 2009, MetaQuotes Software Corp. | 
//|                                              https://www.mql5.com | 
//+------------------------------------------------------------------+ 
#property copyright "2009, MetaQuotes Software Corp." 
#property link      "https://www.mql5.com" 
#property version   "1.02" 
#property script_show_inputs 

//--- input parameters 

//+------------------------------------------------------------------+ 
//| Script program start function                                    | 
//+------------------------------------------------------------------+ 
void OnStart()
  {



   int      all_symbols=SymbolsTotal(false);   string  sym_name="";
   Print("Load symbols ",all_symbols);

   for(int k=0;k<all_symbols;k++)
      if((sym_name=SymbolName(k,false))!="")
        {
         SymbolSelect(sym_name,true);

         Print(k," Symbol name ",sym_name);

         int res=CheckLoadHistory(sym_name,PERIOD_M1,(TimeCurrent()-60*60*24*5));

         switch(res)
           {
            case -1 : Print("Unknown symbol ",sym_name);             break;
            case -2 : Print("Requested bars more than max bars in chart ",sym_name); break;
            case -3 : Print("Program was stopped ",sym_name);                        break;
            case -4 : Print("Indicator shouldn't load its own data ",sym_name);      break;
            case -5 : Print("Load failed ",sym_name);                                break;
            case  0 : Print("Loaded OK ",sym_name);                                  break;
            case  1 : Print("Loaded previously ",sym_name);                          break;
            case  2 : Print("Loaded previously and built ",sym_name);                break;
            default : Print("Unknown result ",sym_name);
           }

         datetime first_date;
         SeriesInfoInteger(sym_name,PERIOD_M1,SERIES_FIRSTDATE,first_date);
         int bars=Bars(sym_name,PERIOD_M1);
         Print("First date ",first_date," - ",bars," bars");
        }
//--- 

//--- 
  }
//+------------------------------------------------------------------+ 
//|                                                                  | 
//+------------------------------------------------------------------+ 
int CheckLoadHistory(string symbol,ENUM_TIMEFRAMES period,datetime start_date)
  {
   datetime first_date=0;
   datetime times[100];
//--- check symbol & period 
   if(symbol==NULL || symbol=="") symbol=Symbol();
   if(period==PERIOD_CURRENT)     period=Period();
//--- check if symbol is selected in the MarketWatch 
   if(!SymbolInfoInteger(symbol,SYMBOL_SELECT))
     {
      if(GetLastError()==ERR_MARKET_UNKNOWN_SYMBOL) return(-1);

      SymbolSelect(symbol,true);
     }
//--- check if data is present 
   SeriesInfoInteger(symbol,period,SERIES_FIRSTDATE,first_date);
   if(first_date>0 && first_date<=start_date) return(1);
//--- don't ask for load of its own data if it is an indicator 
   if(MQL5InfoInteger(MQL5_PROGRAM_TYPE)==PROGRAM_INDICATOR && Period()==period && Symbol()==symbol)
      return(-4);
//--- second attempt 
   if(SeriesInfoInteger(symbol,PERIOD_M1,SERIES_TERMINAL_FIRSTDATE,first_date))
     {
      //--- there is loaded data to build timeseries 
      if(first_date>0)
        {
         //--- force timeseries build 
         CopyTime(symbol,period,first_date+PeriodSeconds(period),1,times);
         //--- check date 
         if(SeriesInfoInteger(symbol,period,SERIES_FIRSTDATE,first_date))
            if(first_date>0 && first_date<=start_date) return(2);
        }
     }
//--- max bars in chart from terminal options 
   int max_bars=TerminalInfoInteger(TERMINAL_MAXBARS);
//--- load symbol history info 
   datetime first_server_date=0;
   while(!SeriesInfoInteger(symbol,PERIOD_M1,SERIES_SERVER_FIRSTDATE,first_server_date) && !IsStopped())
      Sleep(5);
//--- fix start date for loading 
   if(first_server_date>start_date) start_date=first_server_date;
   if(first_date>0 && first_date<first_server_date)
      Print("Warning: first server date ",first_server_date," for ",symbol,
            " does not match to first series date ",first_date);
//--- load data step by step 
   int fail_cnt=0;
   while(!IsStopped())
     {
      //--- wait for timeseries build 
      while(!SeriesInfoInteger(symbol,period,SERIES_SYNCHRONIZED) && !IsStopped())
         Sleep(5);
      //--- ask for built bars 
      int bars=Bars(symbol,period);
      if(bars>0)
        {
         if(bars>=max_bars) return(-2);
         //--- ask for first date 
         if(SeriesInfoInteger(symbol,period,SERIES_FIRSTDATE,first_date))
            if(first_date>0 && first_date<=start_date) return(0);
        }
      //--- copying of next part forces data loading 
      int copied=CopyTime(symbol,period,bars,100,times);
      if(copied>0)
        {
         //--- check for data 
         if(times[0]<=start_date)  return(0);
         if(bars+copied>=max_bars) return(-2);
         fail_cnt=0;
        }
      else
        {
         //--- no more than 100 failed attempts 
         fail_cnt++;
         if(fail_cnt>=100) return(-5);
         Sleep(10);
        }
     }
//--- stopped 
   return(-3);
  }
//+------------------------------------------------------------------+ 
//| Возвращает строкое значение периода                              | 
//+------------------------------------------------------------------+ 
string GetPeriodName(ENUM_TIMEFRAMES period)
  {
   if(period==PERIOD_CURRENT) period=Period();
//--- 
   switch(period)
     {
      case PERIOD_M1:  return("M1");
      case PERIOD_M2:  return("M2");
      case PERIOD_M3:  return("M3");
      case PERIOD_M4:  return("M4");
      case PERIOD_M5:  return("M5");
      case PERIOD_M6:  return("M6");
      case PERIOD_M10: return("M10");
      case PERIOD_M12: return("M12");
      case PERIOD_M15: return("M15");
      case PERIOD_M20: return("M20");
      case PERIOD_M30: return("M30");
      case PERIOD_H1:  return("H1");
      case PERIOD_H2:  return("H2");
      case PERIOD_H3:  return("H3");
      case PERIOD_H4:  return("H4");
      case PERIOD_H6:  return("H6");
      case PERIOD_H8:  return("H8");
      case PERIOD_H12: return("H12");
      case PERIOD_D1:  return("Daily");
      case PERIOD_W1:  return("Weekly");
      case PERIOD_MN1: return("Monthly");
     }
//--- 
   return("unknown period");
  }
//+------------------------------------------------------------------+
 

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

保留中の注文がトリガーされる状況が不明確です。

fxsaber さん 2018.11.26 13:37

また、こんな状況もあります。

  1. 成行注文がポジションを開始 し、OrdersTotalが1つ増加しました。
  2. 実行され、OrdersTotalは1つ減少したが、PositionsTotalは1つ増加 しなかった。つまり、位置はあるのだが、端末がそれを知らないのである。

例えば、ポジションや注文がない場合、PositionsTotal = 0、OrdersTotal = 0となります。

成行注文を設定します。PositionTotal = 0, OrdersTotal = 1.

成行注文が執行される - OrdersTotal = 0.しかし、PositionsTotal = 0!

 
実行期間
PositionSelectByTicket(OrderGetInteger(ORDER_TICKET));

PositionsTotalが(再現が難しくない程度に)変化するような。


例えば、PositionSelectBytTicketがtrueを返す直前に、PositionTotalが0を返す。

理由: