사용자 정의 기호. 오류, 버그, 질문, 제안. - 페이지 31

 

수백 개의 사용자 정의 기호 를 누군가와 공유하는 메커니즘이 있습니까?

기록 전송은 간단합니다. 사용자 지정 폴더를 복사하기만 하면 됩니다. 하지만 캐릭터의 스펙은 불명.

 
fxsaber :

수백 개의 사용자 정의 기호 를 누군가와 공유하는 메커니즘이 있습니까?

기록 전송은 간단합니다. 사용자 지정 폴더를 복사하기만 하면 됩니다. 하지만 캐릭터의 스펙은 불명.

언로딩/로딩을 위한 자체 작성 스크립트를 제안합니다. 정규 수출/수입을 기다리지 않습니다.

 
Andrey Khatimlianskii :

언로딩/로딩을 위한 자체 작성 스크립트를 제안합니다. 정규 수출/수입을 기다리지 않습니다.

자전거는 언뜻 보기에는 단순하지만 상당한 노력이 필요합니다. 기호의 속성 을 설정하는 올바른 순서를 알아야 합니다. 또한 견적/거래 세션에 문제가 있습니다.

저것들. 디버깅하고 디버깅하는 데 지루해야 합니다.

 

새 차트에서 사용자 지정 눈금을 채우는 데 문제가 있습니다. 다른 시간으로 새 기호 차트를 만들려고 합니다.

그러나 나는 항상 통화 기호의 표시를 채우는 데 문제가 있습니다.

코드는 다음과 같습니다.

 //+------------------------------------------------------------------+
//|                                         Forward_Ticks_Sample.mq5 |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots 0

#include "Includes//Symbol.mqh"

string    g[];
int       total_len_history = 0 ,
         initialization_flag,
         symbol_history_wiped_clean,
         len_sym = StringSplit ( Symbol (), '_' ,g);
string    Orig_Symbol_Name = g[ 0 ],
         symbol_custom= StringFormat ( "%s_frd" ,Orig_Symbol_Name);
datetime Let_start = 0 ;
bool      alert_once,
         commentplaced;
long      time_msc = long (Let_start)* 1000 ,
         tick_chart_id;
ulong     LastTime_Added;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
   ResetLastError ();
   string name = MQLInfoString ( MQL_PROGRAM_NAME );
   IndicatorSetString ( INDICATOR_SHORTNAME , name);
   ResetLastError ();

   Close_All_Symbols_Charts(symbol_custom);

   MqlTick tick;

   while ( SymbolInfoTick (Orig_Symbol_Name, tick) == false )
     {
       Sleep ( 1000 );
     }

   alert_once = false ;

   tick_chart_id = 0 ;

   symbol_history_wiped_clean = Remove_Symbol_From_MarketWatch_Delete_History(symbol_custom);

   alert_once = true ;
   initialization_flag = INIT_FAILED ;

   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const int begin,
                 const double &price[])
  {
   ResetLastError ();
   MqlTick tick, ticks[];

   if (symbol_history_wiped_clean == false )
     {
      Close_All_Symbols_Charts(symbol_custom);

      symbol_history_wiped_clean = Remove_Symbol_From_MarketWatch_Delete_History(symbol_custom);

       if (symbol_history_wiped_clean == false )
         return 0 ;
     }

   if (symbol_history_wiped_clean == true &&
      initialization_flag == INIT_FAILED
     )
     {
      Alert_me();
       if (Fill_ReFill_Custom_Symbol(symbol_custom) == - 1 )
         return 0 ;
      initialization_flag = INIT_SUCCEEDED ;
       Print ( "History Filled Successfully." );
       Comment ( "" );
       return rates_total;
     }

   SymbolInfoTick (Orig_Symbol_Name, tick);

//if(tick.time_msc != LastTime_Added)
     {
       ulong tick_count = tick.time_msc - LastTime_Added;
       uint get_count = uint ( MathAbs ( double (tick_count)));

       int len = CopyTicks (Orig_Symbol_Name, ticks, COPY_TICKS_ALL , LastTime_Added, get_count);

       if (len <= 2 )
         return rates_total;

       ulong last_time = ticks[len - 1 ].time_msc;

       if (len > 5 )
        {
         commentplaced = true ;
         ChartSetString (tick_chart_id, CHART_COMMENT , "Please wait while we retrieve ticks........" );
        }

       int filled = Tick_Filling_Logic(ticks, len);

       if (commentplaced == true && filled > 0 )
        {
         if (last_time + 60 > ulong ( TimeCurrent ()))
           {
             ChartSetString (tick_chart_id, CHART_COMMENT , "" );
             Comment ( "" );
            commentplaced = false ;
           }
        }

       if (tick_chart_id <= 0 )
        {
         tick_chart_id = ChartOpen (symbol_custom, PERIOD_M1 );
        }
     }

   return rates_total;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Close_All_Symbols_Charts( string local_symbol)
  {
   tick_chart_id = 0 ;
   ResetLastError ();
   for ( long chartid = ChartFirst (); chartid != - 1 && ! IsStopped (); chartid = ChartNext (chartid))
     {
       string name = ChartSymbol (chartid);

       if ( StringFind (name, local_symbol) < 0 )
         continue ;

       if (! ChartClose (chartid))
         Print ( "Cannot close Chart Symbol: " , name, " Period: " , EnumToString ( ChartPeriod (chartid)));
     }
   Sleep ( 1000 );
  }
//+------------------------------------------------------------------+
bool Remove_Symbol_From_MarketWatch_Delete_History( string local_symbol)
  {
   ResetLastError ();

   Sleep ( 10 );
   const SYMBOL SYMB(local_symbol);

   bool custom = true ;
   bool status = SYMB.IsExist(); //SymbolExist(local_symbol, custom);

   if (status == false )
       return true ;

   if (SYMB.Off() == false )
     {
       Print ( "Cannot UnSelect the Symbol " , local_symbol, " because: " , GetLastError ());
       Sleep ( 5000 );
     }

   Print ( __FUNCTION__ , " : Error = " , GetLastError ());

   if ( CustomTicksDelete (local_symbol, 0 , LONG_MAX ) <= 0 )
       Print ( "Cannot Delete Custom Ticks: " , GetLastError ());

   return true ;
  }
//+------------------------------------------------------------------+
int Fill_ReFill_Custom_Symbol( string local_symbol)
  {
   ResetLastError ();
   total_len_history = 0 ;
   alert_once = false ;
   commentplaced  = false ;
   LastTime_Added = 0 ;

   Comment ( "Refreshing the Tick Chart. Please Wait." );

   MqlDateTime str;
   TimeToStruct ( iTime (Orig_Symbol_Name, 0 , 0 ) - 30 * 86400 , str);
   Comment ( "" );
   datetime start_date = datetime ( StringFormat ( "%d.%d.01 00:00:00" ,str.year,str.mon));
   const SYMBOL SYMB(local_symbol);
   SYMB.CloneProperties(Orig_Symbol_Name);


   MqlTick ticks_add[];

   ulong time_start = GetMicrosecondCount ();

   ResetLastError ();

   if (LastTime_Added == 0 )
      LastTime_Added = ulong (start_date) * 1000 ;

   int len = CopyTicksRange (Orig_Symbol_Name,
                            ticks_add,
                             COPY_TICKS_ALL ,
                            LastTime_Added,
                             ulong ( TimeCurrent ()) * 1000
                           );

   if (len<= 0 )
     {
       string error;
       if ( GetLastError () == 4401 )
         error = "ERR_HISTORY_NOT_FOUND" ;
       else
         error = string ( GetLastError ());
       Print ( "------------------------------------------------------------------" );
       Print ( "History Tick Length: " , len, " Error: " , error);
       Print ( "------------------------------------------------------------------" );
       Sleep ( 5000 );
       // Print("Waited for 10000 milliseconds. Still no history found.");
       return - 1 ;
     }

   Let_start = 0 ;
   time_msc = long (Let_start)* 1000 ;

   int total = Tick_Filling_Logic(ticks_add, len);

   if (total <= 0 )
     {
      SYMB.Off();
       CustomSymbolDelete (local_symbol);
       return - 1 ;
     }

   if ( GetLastError () == 4403 )
     {
       Sleep ( 2000 );
       Print ( "History Failed to Retrieve." );
      len = - 1 ;
       return len;
     }

   Print ( "Gathering Ticks from : " , iTime (Orig_Symbol_Name, 0 , 0 ) - 30 * 86400 , " To: " , TimeCurrent ());
   Print ( "Symbol Working :" ,SYMB.On());
   Print ( "Ticks: " ,len);
   Print ( "Started : " ,ticks_add[ 0 ].time, "  Ended : " ,ticks_add[len- 1 ].time);
   Print ( "Error Found: " , GetLastError ());
   Print ( "Ticks Filled: " , total);

   Print ( "Time Required for completion: " ,( GetMicrosecondCount ()-time_start)/ 1000000 );
   Print ( "Started : " ,ticks_add[ 0 ].time, "  Ended : " ,ticks_add[len- 1 ].time);
   Print ( "History Loaded!!!!" );
   Print (Let_start);

   Comment ( "" );
   ChartSetString (tick_chart_id, CHART_COMMENT , "" );

   return len;
  }
//+------------------------------------------------------------------+
void OnDeinit ( const int r)
  {
   EventKillTimer ();
  }
//+------------------------------------------------------------------+
void Alert_me()
  {
   if (alert_once == false )
       return ;
   Alert (symbol_custom, " : Please Wait for Chart Refresh" );
  }
//+------------------------------------------------------------------+
int Tick_Filling_Logic( MqlTick & ticks_add[],
                       int len)
  {
   ResetLastError ();

   long last = ticks_add[len - 2 ].time_msc,
        time_msc_local = time_msc;
   datetime Let_start_local = Let_start;
   int total_len_history_local = total_len_history;

   for ( int i= 0 ; i < len - 1 && ! IsStopped (); i++)
     {
       if (i == 0 || (i > 0 && iBarShift (Orig_Symbol_Name, PERIOD_M1 , ticks_add[i].time) > iBarShift (Orig_Symbol_Name, PERIOD_M1 , ticks_add[i + 1 ].time)))
        {
         Let_start_local = datetime ( TimeToString (Let_start_local, TIME_DATE | TIME_MINUTES ))
                           + 60 ;
         MqlDateTime tt1;
         TimeToStruct (Let_start_local, tt1);
         if (tt1.day_of_week == 0 )
           {
            Let_start_local = Let_start_local + 86400 ;
           }
         else
             if (tt1.day_of_week == 6 )
              {
               Let_start_local = Let_start_local + 86400 * 2 ;
              }
         time_msc_local = long (Let_start_local)* 1000 ;
        }
       else
        {
         if (ticks_add[i].time == ticks_add[i + 1 ].time)
            time_msc_local = time_msc_local + 1 ;
         else
           {
            Let_start_local = Let_start_local + 1 ;
            time_msc_local = long (Let_start_local)* 1000 ;
           }
        }
      ticks_add[i].time       = Let_start_local;
      ticks_add[i].time_msc   = time_msc_local;
      total_len_history_local = total_len_history_local + 1 ;
     }
   int total = CustomTicksAdd (symbol_custom, ticks_add);

   if (total <= 0 )
     {
       Print ( "Tick Not added : " , GetLastError ());
      total = CustomTicksReplace (symbol_custom, ticks_add[ 0 ].time_msc, ticks_add[len - 1 ].time_msc, ticks_add, len);
     }

   if (total == len)
     {
      LastTime_Added    = last;
      Let_start         = Let_start_local;
      time_msc          = time_msc_local;
      total_len_history = total_len_history_local;
     }
   else
     {
       Print ( "Tick not replaced : " , GetLastError (), " " , len, " = len but filled = " , total, " in " , symbol_custom);
     }
   return total;
  }
//+------------------------------------------------------------------+

종속성 파일을 첨부했습니다.

이 오류가 발생합니다.

문제를 찾고 올바르게 작동하도록 하려면 정확히 무엇을 해야 하는지 도와주세요.

이 오류는 구조의 확인란을 채우지 않았음을 의미합니다. 하지만 그렇다면 이전 양초는 어떻게 완벽해 보였습니까?

파일:
Symbol.mqh  7 kb
 
jaffer wilson :

새 차트에서 사용자 지정 눈금을 채우는 데 문제가 있습니다. 다른 시간으로 새 기호 차트를 만들려고 합니다.

그러나 나는 항상 통화 기호의 표시를 채우는 데 문제가 있습니다.

코드는 다음과 같습니다.

종속성 파일을 첨부했습니다.

이 오류가 발생합니다.

문제를 찾고 올바르게 작동하도록 하려면 정확히 무엇을 해야 하는지 도와주세요.

이 오류는 구조의 확인란을 채우지 않았음을 의미합니다. 하지만 그렇다면 이전 양초는 어떻게 완벽해 보였습니까?

내 사용자 정의 문자 코드를 도와주세요. 나는 이것에 갇혀 있고 내 고객은 화를 내고 있습니다.

 
도움이 필요하시면 https://www.mql5.com/ru/forum/372451
Имеется проблема обновления OHLC в CustomSymbol
Имеется проблема обновления OHLC в CustomSymbol
  • 2021.07.01
  • www.mql5.com
Я пробовал следующий код: Но всегда есть обновление, написанное на диаграмме. Плюс название символа другое в окне спецификации...
 

오늘 터미널을 열었고 업데이트 2994를 다운로드했고 MT5가 재부팅되었습니다. 많은 커스텀 캐릭터를 포함하여 모든 캐릭터가 사라졌습니다.

bases\Custom 폴더에는 사용자 지정 기호에 대한 데이터 파일 .hc, .hcc, .tkc가 있는 history 및 ticks 폴더가 있습니다. 이제 어떻게 사용할 수 있습니까?

경비원! 사용자 지정 기호, 가져오기 기록 등을 다시 생성해야 합니까???

 
Sunriser :

오늘 터미널을 열었고 업데이트 2994를 다운로드했고 MT5가 재부팅되었습니다. 많은 커스텀 캐릭터를 포함하여 모든 캐릭터가 사라졌습니다.

bases\Custom 폴더에는 사용자 지정 기호에 대한 데이터 파일 .hc, .hcc, .tkc가 있는 history 및 ticks 폴더가 있습니다. 이제 어떻게 사용할 수 있습니까?

경비원! 사용자 지정 기호, 가져오기 기록 등을 다시 생성해야 합니까???

사용자 지정 폴더를 다른 위치로 이동하고 기록 없이 기호(사양)를 다시 만들 수 있습니다. 그런 다음 터미널을 종료하고 Custom 폴더를 다시 복사한 다음 터미널을 실행합니다 . 역사가 일어나야 합니다.


ZY는 터미널에서 기호의 json 설정을 백업합니다. 실수로 삭제되거나 다른 쓰레기 - 백업으로 복원되었습니다.

 
fxsaber :

사용자 정의 폴더를 다른 위치로 이동하고 기록 없이 기호(사양)를 다시 만들 수 있습니다. 그런 다음 터미널을 종료하고 Custom 폴더를 다시 복사한 다음 터미널을 실행합니다 . 역사가 일어나야 합니다.


ZY는 터미널에서 기호의 json 설정을 백업합니다. 실수로 삭제되거나 다른 쓰레기 - 백업으로 복원되었습니다.

그것은 효과가 있었다. 시간을 절약해 주셔서 감사합니다!

 

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

사용자 지정 Sybmol: 오류 5308

다크 라이드3r , 2021.06.24 09:55

사용자 지정 기호에 대해 SYMBOL_VOLUME_MIN을 설정하려고 하지만 오류 5308을 반환합니다.

다른 옵션이 제대로 작동하는지 완전히 확인했지만 반환하여 값을 두 배로 설정한 SYMBOL_VOLUME_MIN만

ERR_CUSTOM_SYMBOL_PARAMETER_ERROR 5308

그래서 나는 그것이 시스템의 버그라고 생각하고 고칠 수 있도록보고해야합니다.

이것은 기호를 생성하고 사용자 지정 기호에 대해 SYMBOL_VOLUME_MIN 속성을 설정하는 데 사용하는 방법입니다.

(SetProperty(SName, SYMBOL_VOLUME_MIN , 0.001 , "" )