[ARCHIV]Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Ohne dich kann ich nirgendwo hingehen - 5. - Seite 370

 
TarasBY:

Bezüglich dieser Zeile:

In letzter Zeit fügen die DTs dem Symbolnamen oft verschiedene Präfixe hinzu (z.B. EURUSDm) - diese sollten bei der Bezugnahme auf das Marktumfeld des Symbols berücksichtigt werden.

P.S. ...Und für den Standard "EURUSD" wird StringSubstr ("EURUSD", 6) nicht Null sondern "" sein.

Vielen Dank, Igor! Ich wusste nichts von DTs und dem Brief. Es kann sich um ein Minikonto für das "m" handeln.

Wissen Sie, wo der JPY den Koeffizienten 82 hat ? Für andere Währungen war es 0,625 für GBP, 0,7751937984 für EUR

Die Idee ist, dass der Koeffizient bei der Umrechnung von Währungen schwankt, wenn sich die Wechselkurse ändern. Warum also Konstanten nehmen?
 
Chiripaha:

Nikolai, es ist sehr gut, dass du lernst zu programmieren und Programme zu erstellen. Aber der Punkt ist, dass Sie nicht gerade um Hilfe für einen bestimmten obskuren Fall im Programm gebeten haben, sondern Sie haben tatsächlich die TOR für das Schreiben des Programms umrissen.

Was Sie gezeigt haben, ist meiner Meinung nach, metaphorisch gesprochen, in Bezug auf Roboter, ein Haufen heterogener Ersatzteile. Das ist ganz und gar nicht richtig.

Sie können hier also nicht auf einen bestimmten Fehler hinweisen, da alles ganz anders gemacht werden muss. - IMHO gebe ich nicht vor, mehr als das zu sein.

Aber das ist kein Grund, sich aufzuregen. Lernen Sie weiter, wie man schreibt. Dort, wie sie sagen, statt Sie, natürlich, kann "essen" (um den Job zu tun), aber Sie selbst sind nicht immer gut gefüttert von diesem (dh nicht lernen). Fahren Sie also fort. Wenn einer den anderen den Weg geht.

Versuchen Sie, mit einer anderen Herangehensweise an das Problem erneut zu schreiben. - Bei mir hat es funktioniert.


Danke für die Kritik. Sagen Sie mir, ist die Umsetzung realistisch?
 
NICK_R:
Danke für die Kritik. Ist es überhaupt realistisch, dies zu tun?

Natürlich ist sie das. Aber das ist nicht gerade eine einfache Aufgabe. Es ist nicht sehr schwierig, aber auch nicht einfach. - Das ist genau das Richtige zum Lernen.
 
Chiripaha:

Vielen Dank, Igor! Ich wusste nichts von der DC und dem Brief. Es muss ein Minikonto sein - für den Buchstaben "m".

Wissen Sie, wo der JPY den Koeffizienten von 82 hat ? Die anderen Währungen hatten GBP - 0,625, EUR - 0,7751937984

Die Idee ist, dass der Koeffizient bei der Umrechnung von Währungen schwankt, wenn sich die Wechselkurse ändern. Warum also Konstanten nehmen?

Sergey, diese Zahlen haben für mich keine Bedeutung, daher kann ich diese Frage nicht beantworten.

Und Präfixe in der Symbolschrift können sinnvoll oder unsinnig sein.

 
TarasBY:

Sergey, diese Zahlen sagen mir nichts, daher habe ich keine Antwort auf diese Frage.

Und Präfixe in der Schreibweise des Symbols können einen Sinn ergeben oder auch nicht.

GUT. Ich danke Ihnen!
 

Guten Tag Kollegen!

Können Sie mir bitte sagen, wie ich aus der Schleife herauskomme (im Code rot hervorgehoben)? Der Indikator verlangsamt sich sehr stark.

#property  indicator_separate_window
#property  indicator_buffers 2
#property  indicator_color1  DarkGray
#property  indicator_color2  PowderBlue
#property  indicator_width1  2

//---- basic fan indicator parameters

extern bool Show_AOLine_2=true;
extern int SlowEMA3=34;
extern int EMA=3;
extern bool Show_Volume=true;
extern double coaf=0.5;
//---- indicator buffers
double AOBuffer3[];
double ExtMapBuffer1[];

    double  price_up_start, price_up_end, AO_up;
    double  price_dn_start, price_dn_end, AO_dn;
    datetime time_up, time_dn, AO_time_up, AO_time_dn;
    double Vol_AO_up, Vol_AO_dn;
    int shift_up, shift_dn, dn_koaf, up_koaf, dn_koaf_round, up_koaf_round;
    
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   //---- drawing settings
   
  string name_ind = "Awesome_super_volumes";
   IndicatorShortName("Awesome_super_volumes");
   
   
//---- AO_fan line 2 (basic)
   if(Show_AOLine_2 ==true){Show_AOLine_2=DRAW_LINE; }
   else 
    {Show_AOLine_2=DRAW_NONE; }
   SetIndexBuffer(0,AOBuffer3);
   SetIndexStyle(0,Show_AOLine_2);
   SetIndexLabel(0,"basic line");   

   SetIndexBuffer(1,ExtMapBuffer1);
   SetIndexStyle(1,DRAW_HISTOGRAM);
   SetIndexLabel(1,"Volume");
   
  //---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//| Awesome Oscillator                                               |
//+------------------------------------------------------------------+
int start()
  {
  
   int    limit;
   int    counted_bars=IndicatorCounted();
   double prev,current;
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;

   for(int i=0; i<limit; i++)   // -------------------------------------------- Основной цикл
   {
     
 //---- Awesom + Volumes
     
AOBuffer3[i]=iMA(NULL,0,EMA,0,MODE_SMA,PRICE_MEDIAN,i)-iMA(NULL,0,SlowEMA3,0,MODE_SMA,PRICE_MEDIAN,i);
if (Show_Volume==true)
{
double nSum = Volume[i]*Point*coaf;
   if (AOBuffer3[i]<=0)ExtMapBuffer1[i] = nSum;
   if (AOBuffer3[i]>0)ExtMapBuffer1[i] = -nSum;
double Vol_Arr[];
  if (AOBuffer3[i]<=0)Vol_Arr[i]=Volume[i]*Point*coaf;
  if (AOBuffer3[i]>0)Vol_Arr[i] = -Volume[i]*Point*coaf;
}

//----------------------------- Блок поиска значений -----------------------------------------//
 
 //-- Поиск Low & Time & Min_AO 
  if (AOBuffer3[i] < 0)
  {
 price_up_end = 0; AO_up = 0;  
 price_dn_start = Low[i]; if (price_dn_end == 0) price_dn_end = Low[i]; 
 if (price_dn_start <= price_dn_end) {price_dn_end = price_dn_start; time_dn = Time[i]; shift_dn = iBarShift(NULL, 0, time_dn);}
 if (AOBuffer3[i] <= AO_dn) {AO_dn = AOBuffer3[i]*0.2+AOBuffer3[i]; AO_time_dn = Time[i];}
 dn_koaf=dn_koaf_round;
 up_koaf_round++;
  }   
  
  //-- Поиск High & Time & Max_AO  
  if (AOBuffer3[i] > 0)
   {
  price_dn_end = 0; AO_dn = 0;  
  price_up_start = High[i];
  if (price_up_start >= price_up_end) {price_up_end = price_up_start; time_up = Time[i]; shift_up = iBarShift(NULL, 0, time_up);}
  if (AOBuffer3[i] >= AO_up) {AO_up = AOBuffer3[i]*0.2+AOBuffer3[i]; AO_time_up = Time[i];}
  up_koaf=up_koaf_round;
  dn_koaf_round++;
   }   
 //--------------------------------- Выставляем значения --------------------------------------------//
    
   Vol_AO_up = 0; Vol_AO_dn = 0;
  if (shift_up > shift_dn)
    {
 for (int dn_br = shift_dn; dn_br <= shift_up; dn_br++)            //-------------- Перебор значений внутри основного цикла
          {
    Vol_AO_up += Volume[dn_br]; 
    SetText("Awesome_super_volumes"+up_koaf, DoubleToStr(Vol_AO_up,0), AO_time_dn, AO_dn, Blue);
          }   
  }
 
 if (shift_dn > shift_up)
    {
 for (int up_br = shift_up; up_br <= shift_dn; up_br++)            //-------------- Еще один перебор значений внутри основного цикла
          {
    Vol_AO_dn += Volume[up_br]; 
    SetText("Awesome_super_volumes"+dn_koaf, DoubleToStr(Vol_AO_dn,0), AO_time_up, AO_up, Red);
          }   
    }
 } 
           
//---- done

   return(0);
  }
//+------------------------------------------------------------------+
void SetText(string name, string Vl, datetime t1, double p1, color c)
 {
  ObjectCreate(name,OBJ_TEXT,WindowFind("Awesome_super_volumes"),0,0,0,0);
  ObjectSetText(name, Vl, 6, "Arial Black", c);
  ObjectSet(name, OBJPROP_TIME1 , t1);
  ObjectSet(name, OBJPROP_PRICE1, p1);
  ObjectSet(name, OBJPROP_COLOR, c); 
  }

Ich danke Ihnen!


 
Fox_RM:

Guten Tag Kollegen!

Können Sie mir bitte sagen, wie ich aus der Schleife herauskomme (im Code rot hervorgehoben)? Der Indikator verlangsamt sich sehr stark.

Ich danke Ihnen!

Dennoch möchte ich Ihnen diese, vielleicht etwas alberne, Idee unterbreiten. Aber vielleicht fällt mir ja noch etwas Vernünftiges ein.

Was die Aufgabe betrifft, so benötigen Sie für die endgültige Suche die Daten auf einigen Balken, dann auf der ersten Suche schreiben die Datenwerte in einige Array (oder Puffer - ich bin nicht sehr gut darin).

Nach Abschluss der ersten Suche werden die erforderlichen Werte aus diesem Array (Puffer) entnommen, um Daten für die zweite Suche zu erhalten.

Ich bin mir nur nicht ganz sicher, ob dies der Geschwindigkeit zuträglich ist. Aber ich weiß auch nicht viel über die Ursachen des Bremsens. Es fällt mir schwer, in dieser Hinsicht etwas Qualifizierteres zu sagen.

Was könnten die Vor- und Nachteile sein? Der Nachteil ist, dass man in diesem Fall die Situation auf der Bar nicht online, sondern im Nachhinein einschätzt, wenn die Daten bereits ziemlich unbrauchbar sind. Aber... Dies wird dadurch ausgeglichen, dass Sie die alten Daten nicht mehr online benötigen, wenn Sie sie neu berechnen. Und wenn aktuelle Daten eintreffen, werden sie sofort von der 2. Aufzählung verarbeitet. In diesem Fall dürfte es also keinen Verlust an Relevanz geben. Und außerdem - es wird Ihre Aufgabe lösen: das Überschießen beim Überschießen zu beseitigen. : ))

Vielleicht habe ich etwas übersehen. Nehmen Sie meine Idee kritisch auf. Nun ja, und der beste Kritiker ist die Praxis. Sie müssen nur schreiben und überprüfen, was und wie es funktioniert. Ich glaube schon.

 

Es gibt praktisch keinen Unterschied, nur ein etwas anderes Verfahren zur Ermittlung der Kontrollpunkte A und B. Ich habe es bereits mit Arrays versucht.

Dann müsste ich zwischen A und B auch eine Schleife durch die Stäbe machen. Ich sehe keine andere Möglichkeit, deshalb frage ich ja.

Vielleicht kann mir jemand einen Tipp geben. Vielleicht stimmt etwas mit der Logik der Codeerstellung nicht?

 
Fox_RM:

Es gibt praktisch keinen Unterschied, nur ein etwas anderes Verfahren zur Ermittlung der Kontrollpunkte A und B. Ich habe es bereits mit Arrays versucht.

Dann müsste ich zwischen A und B auch eine Schleife durch die Stäbe machen. Ich sehe keine andere Möglichkeit, deshalb frage ich ja.

Vielleicht kann mir jemand einen Tipp geben. Vielleicht stimmt etwas mit der Logik der Codeerstellung nicht?

Ja, genau - wir müssen sowieso eine Schleife mit dem Überlauf machen. Es gibt also keine Möglichkeit, dies zu vermeiden. Wahrscheinlich sollte die Frage anders gestellt werden: Was ist die Ursache für die Bremsen und wie kann man sie loswerden?
 
Fox_RM:

Guten Tag Kollegen!

Können Sie mir bitte sagen, wie ich aus der Schleife (im Code rot hervorgehoben) herauskomme? Der Indikator verlangsamt sich sehr stark.

Ich danke Ihnen!

Sie können den Indikator an dieser Stelle gruppieren - es wird eine kleine Optimierung des Indikators sein:

if (Show_Volume==true)
{
double nSum = Volume[i]*Point*coaf;
   if (AOBuffer3[i]<=0)ExtMapBuffer1[i] = nSum;
   if (AOBuffer3[i]>0)ExtMapBuffer1[i] = -nSum;
double Vol_Arr[];
  if (AOBuffer3[i]<=0)Vol_Arr[i]=Volume[i]*Point*coaf;
  if (AOBuffer3[i]>0)Vol_Arr[i] = -Volume[i]*Point*coaf;
}

wie diese:

if (Show_Volume==true)
{
 double nSum = Volume[i]*Point*coaf; double Vol_Arr[];  // Не знаю в этом случае можно через запятую переменные прописывать? - double nSum = Volume[i]*Point*coaf, Vol_Arr[];

 if (AOBuffer3[i]<=0) {ExtMapBuffer1[i] =  nSum; Vol_Arr[i] =  Volume[i]*Point*coaf;}
 if (AOBuffer3[i]>0)  {ExtMapBuffer1[i] = -nSum; Vol_Arr[i] = -Volume[i]*Point*coaf;}
}

Hier ist sie:

AO_dn = AOBuffer3[i]*0.2+AOBuffer3[i];
// и тут
AO_up = AOBuffer3[i]*0.2+AOBuffer3[i];

Sie können es ändern in:

AO_dn = AOBuffer3[i]*1.2;
     // и
AO_up = AOBuffer3[i]*1.2;

Dann stapeln sich die "Texte" in der Anzeige. Bevor Sie einen neuen Text einfügen, müssen Sie den alten Text löschen. Das kann den Indikator stark verlangsamen - vielleicht ist das der Grund. Da Sie so viele dieser Texte erhalten, wie es Häkchen bei den ausgewählten Parametern gibt.

Wenn mir jemand sagt, wie ich das am besten in den Code implementieren kann - denn ich bitte selbst um ähnliche Hilfe bei der Programmierung.