[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 645

 
artmedia70:

Es gibt kaum eine Logik darin - die einfache Ausgabe von Zeilen in der Reihenfolge nacheinander...




Ich würde die Funktionen verwenden, um es leichter zu verstehen

//--------------------------------------------------------------- 1 --
// Функция вывода на экран графических сообщений.
//--------------------------------------------------------------- 2 --
  int Informations()
  {
   int   Win_ind;                     // Номер окна индикатора
   int   x,y;
   
   trH4     =Trend_PSAR(NULL,240);  // Четырёхчасовой тренд
   trH1     =Trend_PSAR(NULL,60);   // Часовой тренд
   trM30    =Trend_PSAR(NULL,30);   // Получасовой тренд
   trM15    =Trend_PSAR(NULL,15);   // 15-ти минутный тренд

//--------------------------------------------------------------- 3 --
   Win_ind= WindowFind("Info");        // Ищем номер окна индикатора
   if (Win_ind<0)return;               // Если такого окна нет, уходим
//--------------------------------------------------------------- 4 --
   x =10; y =17;
   MyObject("Equ",         x,    y,   "Свободные средства",                   9, "Tahoma", Gold);
   MyObject("EquVal",      x*23, y,   DoubleToStr(Equ_NEW,2),                 9, "Tahoma", Yellow);

//.................................
   WindowRedraw();                      // Перерисовываем все объекты
   return;
  }


void MyObject(string Name, int X, int Y, string Text, int Size, string Srift, color CL){
   if (ObjectFind(Name)==-1)
      ObjectCreate(Name,OBJ_LABEL,1,0,0,0,0);
   ObjectSet(Name,OBJPROP_XDISTANCE,X);
   ObjectSet(Name,OBJPROP_YDISTANCE,Y);
   ObjectSetText(Name, Text, Size, Srift, CL);
}
 
ToLik_SRGV:

Ich habe auch darüber nachgedacht, habe aber nichts Nützliches gefunden. Wenn es um die Optimierung geht, Sie wissen bereits über die große Bremse von iCustom :), in Indikatoren gibt es eine Beschränkung auf die Anzahl der Bars, die berechnet werden können (durch IndicatorCounted() oder durch die Anzahl der Bars). Im Code macht es keinen Sinn, sich mit der Anzahl und Komplexität verschiedener Konstruktionen wie if, while usw. zu beschäftigen. Nun, im Visualisierungsmodus, wenn jeder "Bounce" modelliert wird, wird es fast immer langsam sein (abhängig von der Komplexität des Systems, natürlich). Irgendwo habe ich gelesen, dass, wenn komplexe Berechnungen in einer DLL, wird es schneller sein, aber ich habe es nicht überprüft. Mit dll, auch genug Nuancen.

Ich erinnere mich, dass Befehle wie TimeCurrent() sehr langsam waren (wenn es mehrere davon im Code gibt).

- Es ist viel besser, sie nur einmal zu verwenden - in einer Variablen - und dann auf diese Variable zuzugreifen.

 
Vinin:


Ich würde die Funktionen zur einfachen Wahrnehmung nutzen

Ja, natürlich, Victor, es ist viel besser lesbar. Aber ich versuche bereits, wo es möglich ist, "frontal" zu schreiben - das ist sehr langsam, und wo es möglich ist, versuche ich, Millisekunden zu sparen...
 
chief2000:

Ich erinnere mich, dass Befehle wie TimeCurrent() sehr langsam sind (wenn es mehrere davon im Code gibt)

- Es ist viel besser, sie nur einmal zu verwenden - in einer Variablen - und dann auf diese Variable zuzugreifen.

Großartig! Es lohnt sich, den Code durchzusehen und ihn neu zu machen...
 
chief2000:

Ich erinnere mich, dass Befehle wie TimeCurrent() sehr langsam waren (wenn es mehrere davon im Code gab)

- Es ist viel besser, sie einmal zu verwenden, d.h. sie in einer Variablen zu speichern und dann auf die Variable zuzugreifen.

Wie setze ich eine solche Variable richtig, damit sie später aufgerufen werden kann?

Ich deklariere sie zuerst in globalen Variablen

datetime CurTime;

Und dann in start()

Ich weise ihm einen Wert zu:

CurTime=TimeCurrent();

und ich erhalte einen Fehler: 'CurTime' - Variable erwartet.

Wie macht man es richtig?

Und noch eine Frage: Wenn ich einigen Variablen nicht in start(), sondern in init() Werte zuweise, werden sie dann korrekt funktionieren?

Nun, ich meine, dass einige Funktionen, z.B. TimeCurrent(), immer noch bei jedem Tick aufgerufen werden, wenn dieser Funktion am Anfang von start() eine Variable zugewiesen wird

 
Schade! CurTime gibt einen Fehler, CurrTime nicht... Wo liegt das Problem?
 
artmedia70:
Schade! CurTime gibt einen Fehler und CurrTime nicht... Was soll das bringen?
Der Punkt ist, dass CurTime der veraltete Name der TimeCurrent-Funktion ist, so dass der Compiler sich immer beschwert, wenn ein Variablenname mit einem Funktionsnamen übereinstimmt...
 
keekkenen:
Der Punkt ist, dass CurTime der veraltete Name der Funktion TimeCurrent ist. Wenn also ein Variablenname mit einem Funktionsnamen übereinstimmt, beschwert sich der Compiler immer...
Nun! Danke, ich werde es in Zukunft wissen.
 

Freunde, mein persönlicher Logikblock ist ein bisschen kaputt. Ich kann mich nicht entscheiden, wie ich mich in dieser Situation verhalten soll:

Wir arbeiten in zwei Richtungen, d.h. Kauf und Verkauf haben ihre eigenen separaten Steuereinheiten. Positionen können gegenläufig eröffnet werden, je nachdem, in welche Richtung sich der Markt in den einzelnen TF bewegt.

Nehmen wir an, dass Verkaufen und Kaufen offen sind (auf M5 und M15) und der Markt plötzlich in die entgegengesetzte Richtung dreht, entgegengesetzt zum offenen Verkauf auf M5 und M15 (wie auch immer die Situation in der Welt ist...). In diesem Fall beginnen alle offenen Verkäufe, den Drawdown stark zu erhöhen, und da wir auch offene Käufe haben, ist es möglich, einige Positionen sowohl in Käufen als auch in Verkäufen zu schließen, um verlustbringende Verkäufe mit minimalen Verlusten auf Kosten der geschlossenen Käufe zu schließen.

Ich kann also nicht entscheiden, wie logisch diese Situation ist. Was sollte es sein?

Nur für den Fall, dass dies der Fall ist, hier ein Beispiel:


 

Gute Leute, zurück zum Thema von gestern:

   double c1b[];
   for(i=1;i<=PeriodB;i++)
   {
   c1b[i]=iCCI(NULL,0,PeriodB,PRICE_TYPICAL,i);
   }
   double c1b_1=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,1);
   double c1b_2=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,2);
   double c1b_3=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,3);
   
   double c1s[];
   for(i=1;i<=PeriodS;i++)
   {
   c1s[i]=iCCI(NULL,0,PeriodS,PRICE_TYPICAL,i);
   }
   double c1s_1=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,1);
   double c1s_2=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,2);
   double c1s_3=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,3);

if (NormalizeDouble(c1s_1,4)>NormalizeDouble(c1s_2,4)&&NormalizeDouble(c1s_2,4)<NormalizeDouble(c1s_3,4))
//if (c1s_1>c1s_2&&c1s_2<c1s_3)
     {                                          // 
      Opn_B=true;                               // Критерий откр. Buy
      Cls_S=true;                               // Критерий закр. Sell
     }
if (NormalizeDouble(c1b_1,4)<NormalizeDouble(c1b_2,4)&&NormalizeDouble(c1b_2,4)>NormalizeDouble(c1b_3,4))
//if (c1b_1<c1b_2&&c1b_2>c1b_3)
     {                                          // 
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
     }

Bitte sagen Sie mir, was die Meldung im Logbuch bedeutet:

2010.06.24 17:28:26 TestGenerator: Nicht übereinstimmende Datenfehler (Volumengrenze 5357 am 2010.01.06 08:00 überschritten)