Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 1018

 
Money_Maker:
Vielen Dank, das wird schneller gehen, deshalb habe ich mich auch für "lippy" entschieden. Besonderen Dank für die Zeichencodes, jetzt muss ich nicht mehr danach suchen.

Ich habe geschrieben, um Kurznamen für Zeichen zu ersetzen, Zeilen in Buchstaben zu unterteilen und die Ersetzung vorzunehmen.

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()

Oder ist es der falsche?

nein, ist es nicht ... die Bedeutung der Dekodierung ist folgende: jeder russische Buchstabe hat einen Wert, z.B. "a", der eine Kombination aus \u0430

ist, um zu konvertieren, müssen Sie bestimmen, welcher Buchstabe diesen oder jenen Wert hat und dann diese Werte durch Buchstaben ersetzen ... Es scheint möglich zu sein, durch KernelDll, aber dieser Weg ist sehr verwirrend, zumindest hat es nicht für mich, nicht viele Informationen und es sieht aus wie es ist nicht ganz richtig ... aber eine benutzerdefinierte Funktion ist der einzige einfache Weg aus meiner Meinung nach
 
Trader76:

Ich habe geschrieben, um kurze Namen für Zeichen zu ersetzen, die Zeichenketten in Buchstaben aufzulösen und die Ersetzung vorzunehmen.

Vielen Dank, ich werde das tun.
 

Guten Tag. Ich habe ein kleines Problem bei der Verwendung des Indikators beim Wechsel zu einem anderen Zeitrahmen, beginnt das Terminal zu verlangsamen, und manchmal bleibt es ganz hängen.

Der Indikator ist das Bollinger Band mit dem angezeigten Abweichungswert. Ich weiß nicht, was genau im Code die Leistungseinbußen verursacht.

Kann mir jemand sagen, wie solche Probleme im Allgemeinen gelöst werden, oder wo ich anfangen soll?

 
FiVik:

Guten Tag. Ich habe ein kleines Problem bei der Verwendung des Indikators beim Wechsel zu einem anderen Zeitrahmen, beginnt das Terminal zu verlangsamen, und manchmal bleibt es ganz hängen.

Der Indikator ist das Bollinger Band mit dem angezeigten Abweichungswert. Ich weiß nicht, was genau im Code die Leistungseinbußen verursacht.

Kann mir jemand sagen, wie solche Probleme im Allgemeinen gelöst werden, oder wo ich anfangen soll?

Höchstwahrscheinlich gibt es eine große Periode für die Berechnung, das ist, warum es hängt, ich glaube nicht, dass Sie für 5000 Bars in der Geschichte zählen müssen, um die aktuellen Werte zu erhalten.
 

Trader76 hier ist die Funktion, die hinzugefügt wurde: iMAOnArray. Darin müssen Sie die Anzahl der zu berechnenden Elemente angeben. Ich habe alle Elemente des Arrays angegeben; nur so erhält man den korrekten Wert für die mittlere Standardabweichung.

Ich habe dies überprüft, indem ich einen gleitenden Durchschnitt über den Standardabweichungsindikator gelegt habe. Wenn ich eine bestimmte Anzahl von Elementen angebe, ändert sich der berechnete Wert.

Vielleicht ist der Indikator langsam, weil er das gesamte Array berechnet, aber er berechnet es auf andere Weise nicht korrekt.

Der Zeitraum des berechneten Durchschnitts beträgt 30.

 
FiVik:

Trader76 hier ist die Funktion, die hinzugefügt wurde: iMAOnArray. Darin müssen Sie die Anzahl der zu berechnenden Elemente angeben. Ich habe alle Elemente des Arrays angegeben; nur so erhält man den korrekten Wert für die mittlere Standardabweichung.

Ich habe dies überprüft, indem ich einen gleitenden Durchschnitt über den Standardabweichungsindikator gelegt habe. Wenn ich eine bestimmte Anzahl von Elementen angebe, ändert sich der berechnete Wert.

Vielleicht ist der Indikator langsam, weil er das gesamte Array berechnet, aber er berechnet es auf andere Weise nicht korrekt.

Der Zeitraum des berechneten Durchschnitts beträgt 30.

Zeigen Sie mir den Code
 

Das ist genau das, was ich hinzugefügt habe, denn vorher hat sich der Indikator nicht verlangsamt.

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

Das ist genau das, was ich hinzugefügt habe, denn vorher hat sich der Indikator nicht verlangsamt.

Nun, wenn Sie das nicht tun wollen, ist das in Ordnung.
 
Vinin:
Nun, wenn Sie es nicht wollen, gut.

Das verstehe ich nicht. Was soll das heißen, Sie wollen nicht?

Sie wollen den gesamten Code? Ja.

Der Name ist kyrillisch, deshalb ist er in Hieroglyphen geschrieben.

Dateien: