FOREX'te sembol adının maksimum uzunluğu - sayfa 11

 
prostotrader :

Gitmeyecek.

Aynı (farklı) semboller üzerinde aynı Uzman Danışman.

tüm girdileri bir dizgeye ekleyin ( bir -period sembolü de ekleyebilirsiniz ),

 
prostotrader :
Birinin, her sipariş için farklı şekilde (koltuk değneği olmadan) benzersiz büyülerin nasıl elde edileceğine dair bir fikri varsa, lütfen

Lütfen paylaşın.

 int magic = ( int ) TimeCurrent ();
int magic = ( int ) TimeLocal ();
Alternatif olarak, baş ağrısı yok.
 
prostotrader :

Zaman, teşekkür ederim, her danışmana benzersizlik verecektir ve ChartID'ye () ve danışmana giden yola bağlanmaya gerek yoktur,

ama yine de sihri terminalin global değişkenine kaydetmeniz gerekiyor.

zaman benzersizlik vermeyecek - danışmanlar etkinken terminali yeniden başlatın - herkes aynı zamana sahip olacak)

 
Konstantin Nikitin :
Alternatif olarak, baş ağrısı yok.

Ve aniden kullanıcı saniye için zamanında olacak. 2-3 danışman atar mısın?

 
Taras Slobodyanik :

zaman benzersizlik vermeyecek - danışmanlar etkinken terminali yeniden başlatın - herkes aynı zamana sahip olacak)

Evet kesinlikle

 
prostotrader :

Ve aniden kullanıcı saniye için zamanında olacak. 2-3 danışman atar mısın?

Bu pek olası değil.

Taras Slobodyanik :

zaman benzersizlik vermeyecek - danışmanlar etkinken terminali yeniden başlatın - herkes aynı zamana sahip olacak)

Ve işte başka bir şarkı. Yeniden başlatırken, EA daha önce açılmış pozisyonları korumak için sihriyle çalışmaya devam etmelidir. O yüzden hatırlamaktan zarar gelmez.

 
Konstantin Nikitin :

Bu pek olası değil.

Ve işte başka bir şarkı. Yeniden başlatırken, EA daha önce açılmış pozisyonları korumak için sihriyle çalışmaya devam etmelidir. O yüzden hatırlamaktan zarar gelmez.

FOREX için bu seçeneğe karar verdim (FORTS değişmedi)

Birisi daha iyi bir fikir bulursa, hoş geldiniz.

 //+------------------------------------------------------------------+
//|                                                    AutoMagic.mqh |
//|                                 Copyright 2017-2018 prostotrader |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
//version   "1.01
//#define FORTS
//---
#include ".\..\include\crc64.mqh"
//---
struct SYMBOL_MAGIC
{
   long ch_id;
   ulong magic;
};
SYMBOL_MAGIC symb_magic;
//-------------------------------------------------------------------+
// Split string function                                             |
//+------------------------------------------------------------------+
string SplitString( const string a_str, ulong &a_month, ulong &a_year)
  {
   int str_size= StringLen (a_str);
   int str_tire= StringFind (a_str, "-" );
   int str_tochka= StringFind (a_str, "." , str_tire);
   if ((str_tire> 0 ) && (str_tochka> 0 ) &&(str_size > 0 ))
     {
      a_month= ulong ( StringToInteger ( StringSubstr (a_str,str_tire+ 1 ,str_tochka-str_tire- 1 )));
      a_year = ulong ( StringToInteger ( StringSubstr (a_str,str_tochka+ 1 ,str_size-str_tochka- 1 )));
       if ((a_month > 0 ) && (a_year > 0 )) return ( StringSubstr (a_str, 0 , str_tire));
     }
   return ( "" );
  }
//-------------------------------------------------------------------+
// Get Magic function                                                |
//+------------------------------------------------------------------+
ulong GetMagic( const string a_symbol)
{
//--- Get ChartID
  symb_magic.ch_id = ChartID ();
   if ( SymbolSelect ( Symbol (), true ) == false )
  {
     Print ( __FUNCTION__ , ": Нет такого символа!" );
     return ( 0 );
  }
   if (symb_magic.ch_id != 0 )
  {
#ifdef FORTS
   ulong month = 0 ;
   ulong year = 0 ;
   string new_str = SplitString(a_symbol,month,year);
   if ( StringLen (new_str)> 0 )
  {
    symb_magic.magic = 0 ;
     uchar char_array[];
     int result= StringToCharArray (new_str,char_array, 0 , WHOLE_ARRAY , CP_ACP );
     if (result> 0 )
    {
       ulong value;
       for ( int i = 0 ; i < result - 1 ; i++)
      {
        value= ulong (char_array[i]);
        value<<=( 56 -(i* 8 ));
        symb_magic.magic += value;
      }
      month<<= 24 ;
      symb_magic.magic += month;
      year<<= 16 ;
      symb_magic.magic += year;
       return (symb_magic.magic);
    }
  }
#else
   uchar Bytes[];
   ulong result = crc64( 0 , Bytes, StringToCharArray ( string (symb_magic.ch_id), Bytes, 0 ));
   if (result > 0 )
  {
    symb_magic.magic = result<< 12 ;
     if ( ulong ( GlobalVariableSet ( Symbol () + ":" + DoubleToString ( double (symb_magic.magic), 0 ), double (symb_magic.magic))) > 0 )
    {
       Print ( "Terminal Global variable created." );
    }
     return (symb_magic.magic);
  }
#endif   
   }   
   return ( 0 ); 
}
//-------------------------------------------------------------------+
// Is my magic function                                              |
//+------------------------------------------------------------------+
bool IsMyMagic( const ulong m_magic, const long chart_id)
{
   if (symb_magic.ch_id == chart_id)
  {
     ulong stored_magic=symb_magic.magic;
     ulong in_magic = m_magic;
#ifdef FORTS  
    stored_magic>>= 16 ;
    in_magic>>= 16 ;
     if (in_magic == stored_magic) return ( true );
#else
   stored_magic>>= 12 ;
  in_magic>>= 12 ;
   if (m_magic == symb_magic.magic) return ( true );
#endif     
   }
   return ( false );
}
//-------------------------------------------------------------------+
// Get stired magic function                                         |
//+------------------------------------------------------------------+
ulong GetStoredMagic( const long cha_id)
{
   if (cha_id == symb_magic.ch_id)
  {
     return (symb_magic.magic);
  }
   return ( 0 );  
}
//+------------------------------------------------------------------+

Buna göre danışmanda

 //+------------------------------------------------------------------+
//|                                                   Magic_test.mq5 |
//|                                      Copyright 2018 prostotrader |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018 prostotrader"
#property link        "https://www.mql5.com"
#property version    "1.00"
#include   "AutoMagic.mqh"

ulong a_magic;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {

  a_magic = GetMagic( Symbol ());
   if (a_magic != 0 )
  {
     if (IsMyMagic(a_magic, ChartID ()) == true )
    {
       Print ( "Magic = " , a_magic);
    }
  }
   
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
  
     string a_name = Symbol () + ":" + DoubleToString ( double (a_magic), 0 );
     if ( GlobalVariableCheck (a_name) == true )
    {
       GlobalVariableDel (a_name);
       Print ( "Terminal Global variable deleted." );
    }
  }
 
ChartID ()

yeniden başlatıldığında da değişir ve EA aynı etiketlerle çalışmaya devam edemez (kaydedilmezlerse)

Danışmanın her bir kopyasının parametrelerde (girdiler) ve sembolde benzersizliği.
Ardından, etiketin kaydedilmesi gerekmez, aynı Expert Advisors parametreleri için aynı olacaktır.

 
prostotrader :

FOREX için bu seçeneğe karar verdim (FORTS değişmedi)

Birisi daha iyisini bulursa, hoş geldiniz.

Soru, her pozisyonda benzersiz bir sihirbazdı. Şimdi düşündüm. Son bileti alıp sihirbaz olarak koymak daha kolay. Aynısını fotokopi makinesinde de kullandım. Sunucu tarafından pozisyon biletini aldı ve istemcilerde sihirbaz tarafından açılan pozisyona atadı. Aynı şey gereksiz hareketler olmadan da çalışır.

 
Konstantin Nikitin :

Soru, her pozisyonda benzersiz bir sihirbazdı. Şimdi düşündüm. Son bileti alıp sihirbaz olarak koymak daha kolay. Aynısını fotokopi makinesinde de kullandım. Sunucu tarafından pozisyon biletini aldı ve istemcilerde sihirbaz tarafından açılan pozisyona atadı. Aynı şey gereksiz hareketler olmadan da çalışır.

Her sipariş için sihrinize sahip olmanız gerekir.

Haklısınız, ChartID yeniden yükleme sırasında değişecektir, bu nedenle terminalin Global Değişkenlerinde hiçbir şeyin saklanmasına gerek yoktur.

 //+------------------------------------------------------------------+
//|                                                    AutoMagic.mqh |
//|                                 Copyright 2017-2018 prostotrader |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
//version   "1.01
//#define FORTS
//---
#include ".\..\include\crc64.mqh"
//---
struct SYMBOL_MAGIC
{
   long ch_id;
   ulong magic;
};
SYMBOL_MAGIC symb_magic;
//-------------------------------------------------------------------+
// Split string function                                             |
//+------------------------------------------------------------------+
string SplitString( const string a_str, ulong &a_month, ulong &a_year)
  {
   int str_size= StringLen (a_str);
   int str_tire= StringFind (a_str, "-" );
   int str_tochka= StringFind (a_str, "." , str_tire);
   if ((str_tire> 0 ) && (str_tochka> 0 ) &&(str_size > 0 ))
     {
      a_month= ulong ( StringToInteger ( StringSubstr (a_str,str_tire+ 1 ,str_tochka-str_tire- 1 )));
      a_year = ulong ( StringToInteger ( StringSubstr (a_str,str_tochka+ 1 ,str_size-str_tochka- 1 )));
       if ((a_month > 0 ) && (a_year > 0 )) return ( StringSubstr (a_str, 0 , str_tire));
     }
   return ( "" );
  }
//-------------------------------------------------------------------+
// Get Magic function                                                |
//+------------------------------------------------------------------+
ulong GetMagic( const string a_symbol)
{
//--- Get ChartID
  symb_magic.ch_id = ChartID ();
   if ( SymbolSelect ( Symbol (), true ) == false )
  {
     Print ( __FUNCTION__ , ": Нет такого символа!" );
     return ( 0 );
  }
   if (symb_magic.ch_id != 0 )
  {
#ifdef FORTS
   ulong month = 0 ;
   ulong year = 0 ;
   string new_str = SplitString(a_symbol,month,year);
   if ( StringLen (new_str)> 0 )
  {
    symb_magic.magic = 0 ;
     uchar char_array[];
     int result= StringToCharArray (new_str,char_array, 0 , WHOLE_ARRAY , CP_ACP );
     if (result> 0 )
    {
       ulong value;
       for ( int i = 0 ; i < result - 1 ; i++)
      {
        value= ulong (char_array[i]);
        value<<=( 56 -(i* 8 ));
        symb_magic.magic += value;
      }
      month<<= 24 ;
      symb_magic.magic += month;
      year<<= 16 ;
      symb_magic.magic += year;
       return (symb_magic.magic);
    }
  }
#else
   uchar Bytes[];
   ulong result = crc64( 0 , Bytes, StringToCharArray ( string (symb_magic.ch_id), Bytes, 0 ));
   if (result > 0 )
  {
    symb_magic.magic = result<< 12 ;
     return (symb_magic.magic);
  }
#endif   
   }   
   return ( 0 ); 
}
//-------------------------------------------------------------------+
// Is my magic function                                              |
//+------------------------------------------------------------------+
bool IsMyMagic( const ulong m_magic, const long chart_id)
{
   if (symb_magic.ch_id == chart_id)
  {
     ulong stored_magic=symb_magic.magic;
     ulong in_magic = m_magic;
#ifdef FORTS  
    stored_magic>>= 16 ;
    in_magic>>= 16 ;
     if (in_magic == stored_magic) return ( true );
#else
   stored_magic>>= 12 ;
  in_magic>>= 12 ;
   if (m_magic == symb_magic.magic) return ( true );
#endif     
   }
   return ( false );
}
//-------------------------------------------------------------------+
// Get stщred magic function                                         |
//+------------------------------------------------------------------+
ulong GetStoredMagic( const long cha_id)
{
   if (cha_id == symb_magic.ch_id)
  {
     return (symb_magic.magic);
  }
   return ( 0 );  
}
//+------------------------------------------------------------------+
#property copyright "Copyright 2018 prostotrader"
#property link        "https://www.mql5.com"
#property version    "1.00"
#include   "AutoMagic.mqh"

ulong a_magic;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {

  a_magic = GetMagic( Symbol ());
   if (a_magic != 0 )
  {
     if (IsMyMagic(a_magic, ChartID ()) == true )
    {
       Print ( "Magic = " , a_magic);
    }
  }
   
//---
   return ( INIT_SUCCEEDED );
  }