Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 1018

 
Money_Maker:
Grazie mille questo sarà più veloce, è per questo che ho anche deciso di "lippy" grazie speciale per i codici dei caratteri ora non dovrò cercarli.

Ho scritto per sostituire i nomi brevi dei personaggi, spezzare le linee in lettere e fare la sostituzione.

string sub_symb[];
ushort u_sep=StringGetCharacter(" ",0);
string SymbolArr[]={
//-------------------- в конце ставить запятую и писать через пробел
// СЕЛЬХОЗ.ПРОДУКЦИЯ
 "Молоко DC",
 "Корм GF",
 "Свинина HE",
 "Рогатый_скот LE",
 "Кукуруза ZC",
 "Соевое_масло ZL",
 "Соевая_мука ZM",
 "Соевые_бобы ZS",
 "Пшеница ZW",
// ЭНЕРГИЯ
 "#BRENT CL",
 "Мазут HO",
 "Газ NG",
 "Газ(мини) QG",
 "Нефть_WTI_(мини) QM",
 "Бензин RB",
// ИНДЕКСЫ
 "S&P_(мини) ES",
 "NASDAQ_(мини) NQ",
 "S&P_500 SP",
 "#DJI30 YM",
 "#DAX30 FDAX",
// МЕТАЛЛЫ
 "Золото GC",
 "Медь HG",
 "Палладий PA",
 "Платина PL",
 "Серебро SI",
 "IndexUSD DX",

//+---------------------------------------------------------------------------------------------+
};

string SubSymbols(string CurSymb)
 {
 for(int i=0; i<ArraySize(SymbolArr); i++)
  {
   StringSplit(SymbolArr[i],u_sep,sub_symb);
   if(CurSymb==sub_symb[0])
    {
     return(sub_symb[1]);
    }
  }
//-
 return(_Symbol);
 }
 
eevviill:

StringGetChar()

StringGetChar()

O è quello sbagliato?

no non lo è ... il significato della decodifica è questo: ogni lettera russa ha un valore ad esempio "a" che è una combinazione di \u0430

per convertire è necessario determinare quale lettera ha questo o quel valore e poi sostituire questi valori con lettere ... Potrebbe essere possibile attraverso KernelDll ma è un percorso fangoso, almeno non ha funzionato per me, non ci sono molte informazioni e sembra che non sia del tutto giusto ... ma una funzione personalizzata è l'unica via d'uscita facile secondo me
 
Trader76:

Ho scritto per sostituire i nomi brevi dei caratteri, spezzare le stringhe in lettere e fare la sostituzione.

Grazie mille, lo farò.
 

Buon pomeriggio. Ho un piccolo problema quando uso l'indicatore quando si passa ad un altro timeframe, il terminale inizia a rallentare, e a volte si blocca completamente.

L'indicatore è le Bande di Bollinger con il valore di deviazione visualizzato. Non so cosa esattamente nel codice stia causando la degradazione delle prestazioni.

Qualcuno può consigliare come si risolvono questi problemi in generale, o da dove cominciare?

 
FiVik:

Buon pomeriggio. Ho un piccolo problema quando uso l'indicatore quando si passa ad un altro timeframe, il terminale inizia a rallentare, e a volte si blocca completamente.

L'indicatore è le Bande di Bollinger con il valore di deviazione visualizzato. Non so cosa esattamente nel codice stia causando una degradazione delle prestazioni.

Qualcuno può consigliare come si risolvono questi problemi in generale, o da dove cominciare?

Molto probabilmente c'è un grande periodo per il calcolo, ecco perché si blocca, non credo che tu debba contare per 5000 barre nella storia per ottenere i valori attuali.
 

Trader76 ecco la funzione che è stata aggiunta: iMAOnArray. In esso, è necessario specificare il numero di elementi da calcolare. Ho specificato tutti gli elementi dell'array; questo è l'unico modo per ottenere il valore corretto della deviazione standard media.

L'ho verificato sovrapponendo una media mobile all'indicatore di deviazione standard. Se specifico un numero particolare di elementi, il valore calcolato cambia.

Forse, l'indicatore è lento a causa del calcolo dell'intero array, ma non lo calcola correttamente in altri modi.

Il periodo di media calcolato è 30.

 
FiVik:

Trader76 ecco la funzione che è stata aggiunta: iMAOnArray. In esso, è necessario specificare il numero di elementi da calcolare. Ho specificato tutti gli elementi dell'array; questo è l'unico modo per ottenere il valore corretto della deviazione standard media.

L'ho verificato sovrapponendo una media mobile all'indicatore di deviazione standard. Se specifico un numero particolare di elementi, il valore calcolato cambia.

Forse, l'indicatore è lento a causa del calcolo dell'intero array, ma non lo calcola correttamente in altri modi.

Il periodo di media calcolato è 30.

Mostrami il codice
 

Questo è esattamente quello che ho aggiunto, prima di questo l'indicatore non rallentava.

//+------------------------------------------------------------------- 
//|Расчет среднего значения девиации
//+------------------------------------------------------------------- 
      Averagedeviation=iMAOnArray(deviationBuffer,0,30,0,MODE_SMA,i);
//+------------------------------------------------------------------- 
//|Вывод значения на экран отдельным объектом
//+------------------------------------------------------------------- 
      string Text =DoubleToStr(deviation,4);                   // Текст для отображения с указанием количества знаков ппосле запятой
      if(deviation<=(Averagedeviation*1.1)&&deviation>=(Averagedeviation*0.9))// Выбор цвета зависит от динамики
      Color_Day_Percent = Color_0;                             // Цвет для 0
      if(deviation>Averagedeviation*1.1)                       // Выбор цвета зависит от динамики
      Color_Day_Percent = Color_Up;                            // Цвет для +
      if(deviation<Averagedeviation*0.9)                       // Выбор цвета зависит от динамики
      Color_Day_Percent = Color_Dn;                            // Цвет для -
      
      if(ObjectFind(Obj_Name)==-1)                             // Если объекта нет..
      {
      ObjectCreate(Obj_Name,OBJ_LABEL,0,0,0);                  // Создаём новый объект 
      ObjectSet    (Obj_Name,OBJPROP_CORNER,    1);            // Угол привязки            
      ObjectSet    (Obj_Name,OBJPROP_XDISTANCE,15);            // Координата Х
      ObjectSet    (Obj_Name,OBJPROP_YDISTANCE,15);            // Координата Y
      }
      ObjectSetText(Obj_Name,Text,10,"MS Sans Serif",Color_Day_Percent);// Текстовое описание объекта      
      i--;   
     }
//----------------------------------------------------------------------
   return(0);
  }
int deinit()
   {
   ObjectDelete(Obj_Name);                                      // Удаление объекта при выходе
   return(0);
   }
//+------------------------------------------------------------------+
 
FiVik:

Questo è esattamente quello che ho aggiunto, prima di questo l'indicatore non rallentava.

Beh, se non vuoi farlo, va bene.
 
Vinin:
Beh, se non lo vuoi, bene.

Non capisco. Cosa vuol dire che non vuoi?

Vuoi tutto il codice? Ok.

Il nome è in cirillico, ecco perché è in geroglifico.