Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 1018

 
Money_Maker:
Muchas gracias esto será más rápido, por eso también me decidí por "lippy" gracias especiales por los códigos de caracteres ahora no tendré que buscarlos.

Escribí para reemplazar los nombres cortos de los personajes, romper las líneas en letras y hacer el reemplazo.

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 es el equivocado?

no, no lo es... el significado de la decodificación es el siguiente: cada letra rusa tiene un valor, por ejemplo, "a", que es una combinación de \u0430

para convertirlo hay que determinar qué letra tiene tal o cual valor y luego reemplazar estos valores con letras ... Puede ser posible a través de KernelDll pero es un camino turbio, al menos a mí no me ha funcionado, no hay mucha información y parece que no está del todo bien... pero una función personalizada es la única salida fácil en mi opinión
 
Trader76:

He estado escribiendo para reemplazar los nombres cortos de los personajes, dividir las cadenas en letras y hacer el reemplazo.

Muchas gracias, así lo haré.
 

Buenas tardes. Tengo un pequeño problema cuando uso el indicador al cambiar a otro marco temporal, el terminal empieza a ralentizarse, y a veces se cuelga completamente.

El indicador es las Bandas de Bollinger con el valor de desviación mostrado. No sé qué es exactamente lo que está causando la degradación del rendimiento en el código.

¿Puede alguien aconsejar cómo se resuelven estos problemas en general, o por dónde empezar?

 
FiVik:

Buenas tardes. Tengo un pequeño problema cuando uso el indicador al cambiar a otro marco temporal, el terminal empieza a ralentizarse, y a veces se cuelga completamente.

El indicador es las Bandas de Bollinger con el valor de desviación mostrado. No sé qué es exactamente lo que está causando la degradación del rendimiento en el código.

¿Puede alguien aconsejar cómo se resuelven estos problemas en general, o por dónde empezar?

Lo más probable es que haya un periodo grande para el cálculo, por eso se cuelga, no creo que haya que contar durante 5000 barras en el historial para obtener los valores actuales.
 

Trader76 aquí está la función que se añadió: iMAOnArray. En él, hay que especificar el número de elementos a calcular. He especificado todos los elementos del array; sólo así se obtiene el valor correcto de la media de la desviación estándar.

Lo he comprobado superponiendo una media móvil al indicador de desviación estándar. Si especifico un número determinado de elementos, el valor calculado cambia.

Tal vez, el indicador es lento debido al cálculo de toda la matriz, pero no lo calcula correctamente de otras maneras.

El periodo de media calculado es de 30.

 
FiVik:

Trader76 aquí está la función que se añadió: iMAOnArray. En él, hay que especificar el número de elementos a calcular. He especificado todos los elementos del array; sólo así se obtiene el valor correcto de la media de la desviación estándar.

Lo he comprobado superponiendo una media móvil al indicador de desviación estándar. Si especifico un número determinado de elementos, el valor calculado cambia.

Tal vez, el indicador es lento debido al cálculo de toda la matriz, pero no lo calcula correctamente de otras maneras.

El periodo de media calculado es de 30.

Muéstrame el código
 

Esto es exactamente lo que he añadido, antes de esto el indicador no se ralentizaba.

//+------------------------------------------------------------------- 
//|Расчет среднего значения девиации
//+------------------------------------------------------------------- 
      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:

Esto es exactamente lo que he añadido, antes de esto el indicador no se ralentizaba.

Bueno, si no quieres hacerlo, está bien.
 
Vinin:
Bueno, si no lo quieres, bien.

No lo entiendo. ¿Cómo que no quieres?

¿Quieres el código completo? De acuerdo.

El nombre está en cirílico, por eso está en jeroglífico.

Archivos adjuntos: