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

 
Gehirnwäsche...

Space:

... Der Euro bringt immer weniger Dollar pro Einheit ein, also wird der Euro teurer? Warum sagen sie, dass es abwärts geht?

... Ein Kilo Tomaten ist weniger als einen Rubel wert, also werden die Tomaten teurer? Warum sagen sie, dass sie billiger werden?
 
iMAG:
Um dies zu verdeutlichen, sollten Sie sich GetLastError() nach dem Zuweisungsoperator ansehen - es muss bei der Aufschlüsselung helfen. Zumindest im obigen Beispiel funktioniert alles einwandfrei. ;)


int init()
{
//----
// i = 0;
double s[10] = {,,3,4,5,6,7,8,9};
int i = 0;

while(i < 10)
{
s[i] = i + 10;
i++;
Print("s[i]: ", DoubleToStr(s[i], 2), " i: ", i, "GetLastError(): ", GetLastError());

Sleep(5000);
}

//----

return(0);
}

Hier ein Beispiel: Der Wert (i + 10) wird nicht zugewiesen. Mit dieser Initialisierung, nur durch ein Array von Aufträgen - was sind die Geheimnisse?


 

Stepan2

Werke

int init()
  {
//----
double s[11];
// i = 0;
int i = 0;

while(i < 10)
{
s[i] = i*10;
i++;
Print("s[i]: ", DoubleToStr(s[i], 2), " i: ", i, "   GetLastError(): ", GetLastError());

Sleep(5000);
}

   return(0);
  }

 
GaryKa:
Hat mein Gehirn zerrissen ... Ein Kilogramm Tomaten ist weniger als Rubel wert, also werden Tomaten teurer? Warum sagen sie, dass sie billiger werden?


Das heißt, ein Dollar, sei es im Zähler oder im Nenner, ist immer GELD (auch in großen Unternehmen), der Rest sind "Waren".

Funktioniert das so?

Was ist mit Kreuzen? Woher weiß man, was man durch was teilen muss, wenn man ein Kreuz bildet?

Das heißt, warum steht die eine Währung notwendigerweise im Zähler und die andere im Nenner und nicht umgekehrt?

 
r772ra:

Stepan2

Werke


Was meinen Sie damit?

DIESES Terminal hängt von einem BROKER ab!

 
Space:


D.h. ein Dollar, egal ob er im Zähler oder im Nenner steht, ist immer GELD (auch in großen Unternehmen), der Rest ist "HANDEL".

Funktioniert das so?

Was ist mit Kreuzen? Woher weiß man, was man durch was teilen muss, wenn man ein Kreuz bildet?

Das heißt, warum steht eine Währung notwendigerweise im Zähler und die andere im Nenner, und nicht umgekehrt?


Der Lernprozess läuft folgendermaßen ab:

DIVISION - fortlaufend, aber in umgekehrter Richtung

RUNNING - Action-Skript

 
Stepan2:


Was meinen Sie damit?

Dass das Terminal vom BROKER abhängt!

Ich kann nichts über den Makler sagen, es ist unwahrscheinlich, dass mit dem Makler etwas nicht stimmt.

Und was den Code angeht, vielleicht liege ich ja falsch.

Sie haben ein Array deklariert und es gefüllt

double s[10] = {,,,3,4,5,6,7,8,9}; 

und Sie zeigen diese Zahlen, ja wenn doppelt, dann 1,0, 2,0, usw.

In meinem Fall

double s[11];

Sie muss etwas größer sein, um den Fehler zu vermeiden (4002).

und es füllt in der Schleife, so, ja, ich bekomme es nicht ...... nur durch ein Array von Aufträgen .....

 

Ich habe zwei MACD (Macd1 und Macd2) im gleichen Fenster und auf der gleichen Skala platziert. Ich finde Max und Min jedes MACD nur unter den im Indikatorfenster sichtbaren Chartwerten. Ich habe sie in Comment() eingegeben. Alles funktioniert, aber die Signallinien beginnen ab dem ersten Balken zu zeichnen, d.h. ich muss warten, bis sie das ganze Fenster füllen. Wie kann ich dieses Problem beheben? Und wie kann ich meinen umständlichen Code optimieren?

  
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 Lime
#property indicator_color2 Red
#property indicator_color3 Aqua
#property indicator_color4 DarkOrange
#property  indicator_width1  2
#property  indicator_width3  2
//--- buffers
double Macd1Buffer[];
double Signal1Buffer[];
double Macd2Buffer[];
double Signal2Buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,Macd1Buffer);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,Signal1Buffer);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,Macd2Buffer);
   SetIndexStyle(3,DRAW_LINE);
   SetIndexBuffer(3,Signal2Buffer);
   
   IndicatorDigits(Digits);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   Comment("");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {   
      double max1=-0.01,min1=0.01,
             max2=-0.01,min2=0.01,
             max_M1=-0.01,min_M1=0.01,
             max_M2=-0.01,min_M2=0.01,
             max_S1=-0.01,min_S1=0.01,
             max_S2=-0.01,min_S2=0.01;
             
       
 
   int bars_counted=WindowBarsPerChart()-1,
       limit;  
       limit=bars_counted;       


      
//---- macd counted in the 1-st buffer
   for(int i=0; i<limit; i++)
   

   { 
     Macd1Buffer[i]=iMA(NULL,0,6,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,i);
  
           max_M1=MathMax(Macd1Buffer[i],max_M1);
           min_M1=MathMin(Macd1Buffer[i],min_M1);
  
      Signal1Buffer[i]=iMAOnArray(Macd1Buffer,Bars,5,0,MODE_SMA,i);
 
           max_S1=MathMax(Signal1Buffer[i],max_S1);
           min_S1=MathMin(Signal1Buffer[i],min_S1);         
             
           max1=MathMax(max_M1,max_S1);
           min1=MathMin(min_M1,min_S1);
             
   }          
            
      
//---- done
   //---- macd counted in the 3-st buffer   
   for(i=0; i<limit; i++) 
      
   { 
     
      Macd2Buffer[i]=iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,26,0,MODE_EMA,PRICE_CLOSE,i);
 
          
           max_M2=MathMax(Macd2Buffer[i],max_M2);
           min_M2=MathMin(Macd2Buffer[i],min_M2);
           
   
      Signal2Buffer[i]=iMAOnArray(Macd2Buffer,Bars,9,0,MODE_SMA,i);

           max_S2=MathMax(Signal2Buffer[i],max_S2);
           min_S2=MathMin(Signal2Buffer[i],min_S2);  
         
           max2=MathMax(max_M2,max_S2);
           min2=MathMin(min_M2,min_S2);    
   }      
      
//---- done 
   
 
      Comment( "\n"," Баров = ",WindowBarsPerChart()-1,
               "\n"," max_M1 = ",max_M1,
               "\n"," min_M1 = ",min_M1,
               "\n"," max_S1 = ",max_S1,
               "\n"," min_S1 = ",min_S1,
               "\n"," max_M2 = ",max_M2,
               "\n"," min_M2 = ",min_M2,
               "\n"," max_S2 = ",max_S2,
               "\n"," min_S2 = ",min_S2,
               "\n"," max1 = ",max1,
               "\n"," min1 = ",min1,    
               "\n"," max2 = ",max2,
               "\n"," min2 = ",min2);
         
             
         
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
MK07:

Ich habe zwei MACD (Macd1 und Macd2) im gleichen Fenster und auf der gleichen Skala platziert. Ich finde Max und Min jedes MACD nur unter den im Indikatorfenster sichtbaren Chartwerten. Ich füge sie in Comment() ein. Alles funktioniert, aber die Signallinien beginnen ab dem ersten Balken zu zeichnen, d.h. ich muss warten, bis sie das ganze Fenster ausfüllen. Wie kann ich dieses Problem beheben? Und wie kann ich meinen langsamen Code optimieren?

Versuchen Sie, jeden Puffer in einer separaten Schleife.
 
r772ra:
Probieren Sie es aus, jeder Puffer in einer eigenen Schleife.
Ja, das stimmt.
   for(int i=0; i<limit; i++)
   { 
     Macd1Buffer[i]=iMA(NULL,0,6,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,i);
     Macd2Buffer[i]=iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,26,0,MODE_EMA,PRICE_CLOSE,i);   
   }          

   for(i=0; i<limit; i++) 
   { 
      Signal1Buffer[i]=iMAOnArray(Macd1Buffer,Bars,5,0,MODE_SMA,i);
      Signal2Buffer[i]=iMAOnArray(Macd2Buffer,Bars,9,0,MODE_SMA,i);
   }      
Grund der Beschwerde: