오류, 버그, 질문 - 페이지 2457

 
시장에서 사용자가 항상 오류 발생 시 롤백할 수 있도록 이전 버전의 EX5에 (자원을 통해) 투자하도록 제품을 업데이트할 때 연습하는 사람이 있습니까?
 
fxsaber :
시장에서 사용자가 항상 오류 발생 시 롤백할 수 있도록 이전 버전의 EX5에 (자원을 통해) 투자하도록 제품을 업데이트할 때 연습하는 사람이 있습니까?

자원없이 할 수 있습니다 ...

문제는 최신 버전이 다른 설정을 가질 수 있다는 것입니다...

다른 설정을 표시하는 것은 이미 문제입니다 ...

 
Vladimir Pastushak :

자원없이 할 수 있습니다 ...

문제는 최신 버전이 다른 설정을 가질 수 있다는 것입니다...

다른 설정을 표시하는 것은 이미 문제입니다 ...

나는 이것에 어떤 문제도 보이지 않는다.

 

라이브 VPS에서 로그를 요청할 때 "Failed to get terminal logs" 오류가 표시됩니다.

무엇이 문제가 될 수 있는지 누가 알겠습니까? 동시에 VPS의 어드바이저가 작업(오픈/클로즈)을 하지만 로그를 다운로드할 수 없습니다.

 
fxsaber :

나는 이것에 어떤 문제도 보이지 않는다.

이제서야 이전 버전의 EX5에는 보호 메커니즘이 있어야 한다는 것을 깨달았습니다.

그리고 이전 버전의 EX5 리소스를 통해 보호 없이 전송할 수 있으므로 적합하지 않습니다.

 

저는 5k에 지표를 쓰고 있습니다.

차트 의 입력 필드 에서 평균의 기간을 강제로 업데이트할 수 없습니다. 4ke에서는 이 디자인이 작동합니다.

뭐가 문제 야? 이해가 안돼? OnChartEvent 를 통해 인터넷의 필드가 업데이트되고 마침표가 없습니다. 어떤 식으로든 바꿀 수 없습니다.

간단한 작업 예제를 첨부합니다.

 //+------------------------------------------------------------------+
//|                                                      Probe_2.mq5 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                                 https://mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link        "https://mql5.com"
#property description "The MA "
#property version    "1.00"
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots    1
//--- plot MA1
#property indicator_label1    "MA 1"
#property indicator_type1    DRAW_LINE
#property indicator_color1    clrDarkOrange
#property indicator_style1    STYLE_SOLID
#property indicator_width1    1

//--- input parameters
 extern int PBB= 10 ;   //  период МА
//--- indicator buffers
double          BufferMA1[];
//--- global variables
int             period_ma1;
int             period_max;

int             handle_ma1;
string sn,sPBB;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
  

   sPBB= IntegerToString (PBB);
   if ( ObjectFind ( 0 , "P2edit" )!= 0 )
    {
       ObjectCreate ( 0 , "P2edit" , OBJ_EDIT , 0 , 0 , 0 );
       ObjectSetInteger ( 0 , "P2edit" , OBJPROP_XDISTANCE , 300 );
       ObjectSetInteger ( 0 , "P2edit" , OBJPROP_YDISTANCE , 1 );
       ObjectSetInteger ( 0 , "P2edit" , OBJPROP_XSIZE , 70 );
       ObjectSetInteger ( 0 , "P2edit" , OBJPROP_YSIZE , 40 );
       ObjectSetInteger ( 0 , "P2edit" , OBJPROP_SELECTABLE , false );
       ObjectSetInteger ( 0 , "P2edit" , OBJPROP_BGCOLOR , clrBlack );
       ObjectSetString ( 0 , "P2edit" , OBJPROP_TEXT ,sPBB);
       ObjectSetInteger ( 0 , "P2edit" , OBJPROP_FONTSIZE , 16 );
       ObjectSetInteger ( 0 , "P2edit" , OBJPROP_COLOR , clrGray );
       ObjectSetInteger ( 0 , "P2edit" , OBJPROP_ALIGN , ALIGN_CENTER );
       ObjectSetInteger ( 0 , "P2edit" , OBJPROP_READONLY , false );
    }


//--- set global variables
   period_ma1= int (PBB< 1 ? 1 : PBB);
//--- indicator buffers mapping
   SetIndexBuffer ( 0 ,BufferMA1, INDICATOR_DATA );
   ArraySetAsSeries (BufferMA1, true );
   IndicatorSetInteger ( INDICATOR_DIGITS , Digits ());
//--- create handle
   ResetLastError ();

   Comment ( "Должна соответствовать зеленой, а равна= " ,PBB);
   
   handle_ma1= iMA ( NULL , PERIOD_CURRENT ,period_ma1, 0 , 1 , PRICE_CLOSE );
   if (handle_ma1== INVALID_HANDLE )
     {
       Print ( "The iMA(" ,( string )period_ma1, ") object was not created: Error " , GetLastError ());
       return INIT_FAILED ;
     }
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+
void OnChartEvent ( const int id, const long &lparam, const double &dparam, const string &sparam)
 {
   if (id== CHARTEVENT_OBJECT_ENDEDIT )
   {
     string obj_name=sparam;
     if (! StringCompare (obj_name, "P2edit" ))
     {
     string novPBB= NULL ;
     if ( ObjectGetString ( 0 ,obj_name, OBJPROP_TEXT , 0 ,novPBB))
      {
       if ( StringCompare (novPBB,sPBB, false ))
        {
         PBB= ( int ) StringToInteger (novPBB);
         ObjectSetInteger ( 0 , "P2edit" , OBJPROP_BGCOLOR , clrBlack );
         ObjectSetInteger ( 0 , "P2edit" , OBJPROP_COLOR , clrLime );
        }
       }
Print ( "B OnChartEvent PBB=" ,PBB);
       ChartSetSymbolPeriod ( 0 , _Symbol , _Period );
      }
    }
     return ;
 }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {
//    Пробовал от сюда запускать.
//   sPBB=IntegerToString(PBB);
//   if(ObjectFind(0,"P2edit")!=0)
//    {
//       ObjectCreate(0,"P2edit",OBJ_EDIT,0,0,0);
//       ObjectSetInteger(0,"P2edit",OBJPROP_XDISTANCE,300);
//       ObjectSetInteger(0,"P2edit",OBJPROP_YDISTANCE,1);
//       ObjectSetInteger(0,"P2edit",OBJPROP_XSIZE,70);
//       ObjectSetInteger(0,"P2edit",OBJPROP_YSIZE,40);
//       ObjectSetInteger(0,"P2edit",OBJPROP_SELECTABLE,false);
//       ObjectSetInteger(0,"P2edit",OBJPROP_BGCOLOR,clrBlack);
//       ObjectSetString (0,"P2edit",OBJPROP_TEXT,sPBB);
//       ObjectSetInteger(0,"P2edit",OBJPROP_FONTSIZE,16);
//       ObjectSetInteger(0,"P2edit",OBJPROP_COLOR,clrGray);
//       ObjectSetInteger(0,"P2edit",OBJPROP_ALIGN,ALIGN_CENTER);
//       ObjectSetInteger(0,"P2edit",OBJPROP_READONLY,false);
//    } 
//   
//   if(PBB==0) PBB=(int)StringToInteger(sPBB);
// 
//   if(PBB<5) period_ma1=5; else  period_ma1=PBB;
//   if(PBB>300) period_ma1=300; else  period_ma1=PBB;
   
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+

   ArraySetAsSeries (close, true ); //--- Установка массивов буферов как таймсерий
//--- Проверка количества доступных баров
   if (rates_total< fmax (period_max, 4 )) return 0 ;
//--- Проверка и расчёт количества просчитываемых баров
   int limit=rates_total-prev_calculated;
   if (limit> 1 )
     {
      limit=rates_total- 2 ;
       ArrayInitialize (BufferMA1, EMPTY_VALUE );
     }

//--- Подготовка данных
   int count=(limit> 0 ? rates_total : 1 ),copied= 0 ;
   copied= CopyBuffer (handle_ma1, 0 , 0 ,count,BufferMA1);
   if (copied!=count) return 0 ;

 //Comment("ошибка = ");
 
//--- возвращаемое значение prev_calculated для следующего вызова
   return (rates_total);
  }

//+------------------------------------------------------------------+
//|            deinit                                                |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
   int i;
   int obj_total= ObjectsTotal ( 0 , 0 ,- 1 );
   for (i=obj_total- 1 ;i>= 0 ;i--)
     {
      sn= ObjectName ( 0 ,i, 0 ,- 1 );
       if ( ObjectFind ( 0 ,sn)== 0 ) 
        {
         if ( StringFind (sn, "P2edit" , 0 )== 0 ) ObjectDelete ( 0 ,sn);
        }
     }
  
   Comment ( "" );
   return ;
  }
 
Zakhar Chumak :

라이브 VPS에서 로그를 요청할 때 "Failed to get terminal logs" 오류가 표시됩니다.

무엇이 문제가 될 수 있는지 누가 알겠습니까? 동시에 VPS의 어드바이저가 작업(오픈/클로즈)하지만 로그를 다운로드할 수 없습니다.

임시 폴더 경로가 너무 긴 것 같습니다.

아카이브된 로그는 먼저 시스템 임시 폴더의 임시 파일(확장자가 .tmp)로 읽혀집니다. 임시 파일의 이름을 생성하는 동안 오류가 발생했습니다.

 

통과 후 에이전트가 잠을 자고 나머지 바쁜 에이전트가 작업을 마칠 때까지 기다린다는 것을 올바르게 이해하고 있습니까?


 

뭐라고요?

아무도 내 질문에 대답할 수 없습니다 ?

재미있게. 이 옵션 을 사용하면 OnCalculate 가 작동합니다. 그러나 이 옵션은 적합하지 않습니다.

 int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const int begin,
                 const double &price[])
 
Uladzimir Izerski :

뭐라고요?

아무도 내 질문에 대답할 수 없습니다 ?

재미있게. 이 옵션 을 사용하면 OnCalculate 가 작동합니다. 그러나 이 옵션은 적합하지 않습니다.

차트/기간을 변경할 때 입력 필드에 지정한 값에 관계없이 PBB는 값 10을 가져옵니다.

재초기화 시에는 마치 첫 번째 실행인 것처럼 발생합니다.

문제를 해결하는 두 가지 방법이 있습니다

1 - 터미널 전역 변수에 PBB 값을 저장하고 거기에서 기간 가져오기

2 - OnChartEvent 트리거 시 MA 표시기를 다시 초기화하고 새 핸들을 가져옵니다...