[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 280

 
Ich kann den Befehl zum Neuzeichnen des benutzerdefinierten Indikators nicht finden. Wenn jemand etwas weiß, bitte ich um Mitteilung. Vielen Dank im Voraus =)
 
tesla-pip:
Ich kann den Befehl zum Neuzeichnen des benutzerdefinierten Indikators nicht finden. Wenn jemand etwas weiß, bitte ich um Mitteilung. Vielen Dank im Voraus =)

Ich habe es bereits gefunden. Vielen Dank an alle =)
 

Guten Tag.

Können Sie mir helfen, eine Formel zu finden?

Ich habe einen Nachfüllschritt SD=100;

Wenn der Kurs 25 beträgt, dann ist die Obergrenze DE=100

Wenn der Preis 102 beträgt, ist der Satz der Einheiten UD=200

bei einem Preis von 215 beträgt der Aufstockungssatz BP=300

der Preis wieder auf 135 gefallen ist, wird die Obergrenze bei UD=200 liegen

 
TarasBY:

Und diese Ordnung der Dinge ist normal (das sind die Prinzipien des Terminals).

Wenn Sie möchten, dass Indikator B seine Anzeigen ändert, wenn sich die Parameter von Indikator A ändern, führen Sie einen Informationsaustausch zwischen den Indikatoren durch (z. B. über eine Datei, globale Variablen des Terminals oder den Arbeitsspeicher des Computers): Indikator A übergibt seine initialisierbaren Parameter während der Initialisierung, und Indikator B prüft in regelmäßigen Abständen mögliche Parameteränderungen von Indikator A. Wenn er Änderungen feststellt, sollte sich auch Indikator B mit neuen Parametern perinitialisieren (forced init()).

Vielen Dank für Ihre Antwort, aber ich kann es nicht verwenden, da ich nicht alles verstehe und nicht sehr gut programmieren kann. Könnten Sie bitte die notwendigen Änderungen an meinen Indikatorcodes vornehmen?



Der erste Code ist der Indikator A.

Zweiter Code-Indikator B.

//---- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 3
#property  indicator_color1  Black
#property  indicator_color2  Green
#property  indicator_color3  Red
#property  indicator_width2  2
#property  indicator_width3  2
#property  indicator_level1 0.0

//---- input parameters
extern int FastPeriod =5;
extern int LowPeriod  =34;
//---- indicator buffers
double     ExtBuffer0[];
double     ExtBuffer1[];
double     ExtBuffer2[];



//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   //---- drawing settings
   SetIndexStyle(0,DRAW_NONE);
   SetIndexStyle(1,DRAW_HISTOGRAM);
   SetIndexStyle(2,DRAW_HISTOGRAM);
   IndicatorDigits(Digits+1);
   SetIndexDrawBegin(0,34);
   SetIndexDrawBegin(1,34);
   SetIndexDrawBegin(2,34);
//---- 3 indicator buffers mapping
   SetIndexBuffer(0,ExtBuffer0);
   SetIndexBuffer(1,ExtBuffer1);
   SetIndexBuffer(2,ExtBuffer2);
//---- name for DataWindow and indicator subwindow label
   IndicatorShortName("My_AO");
   SetIndexLabel(1,NULL);
   SetIndexLabel(2,NULL);
//---- 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;
//---- macd
   for(int i=0; i<limit; i++)
      ExtBuffer0[i]=iMA(NULL,0,FastPeriod,0,MODE_SMA,PRICE_MEDIAN,i)-iMA(NULL,0,LowPeriod,0,MODE_SMA,PRICE_MEDIAN,i);
//---- dispatch values between 2 buffers
   bool up=true;
   for(i=limit-1; i>=0; i--)
     {
      current=ExtBuffer0[i];
      prev=ExtBuffer0[i+1];
      if(current>prev) up=true;
      if(current<prev) up=false;
      if(!up)
        {
         ExtBuffer2[i]=current;
         ExtBuffer1[i]=0.0;
        }
      else
        {
         ExtBuffer1[i]=current;
         ExtBuffer2[i]=0.0;
        }
        
       
     }
//---- done
   return(0);
  }
#property indicator_separate_window
#property indicator_minimum -1.5
#property indicator_maximum 1.5
#property indicator_buffers 2
#property indicator_color1 Green
#property indicator_color2 Red
#property  indicator_width1  2
#property  indicator_width2  2
#property indicator_level1 0.0

//--- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexStyle(1,DRAW_HISTOGRAM);
   SetIndexBuffer(1,ExtMapBuffer2);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {  
      
       
    double UP,DN;     
  
  
    int counted_bars=IndicatorCounted(),
       limit;  
       
    if(counted_bars>0)
      counted_bars--;
   
      limit=Bars-counted_bars;
//----
   for(int i=0;i<limit;i++)
       
      { 
        UP=iCustom(NULL,0,"My_AO",1,i+1);               
        DN=iCustom(NULL,0,"My_AO",2,i+1);    
             
        
       if(UP>0)       
         {ExtMapBuffer1[i+1]=1;
          ExtMapBuffer2[i+1]=0;
         }
         
       if(UP<0)       
         {ExtMapBuffer1[i+1]=-1;
          ExtMapBuffer2[i+1]=0;
         }  
         
                              
       if(DN>0)            
         {
          ExtMapBuffer1[i+1]=0;
          ExtMapBuffer2[i+1]=1;
         }
              
       if(DN<0)            
         {
          ExtMapBuffer1[i+1]=0;
          ExtMapBuffer2[i+1]=-1;
         }
               
                       
    
    }
//----
   return(0);
 
   }
   
//+------------------------------------------------------------------+    
   

 

Die letzte Frage wurde gelöst, die neue Frage lautet

Ich lasse den Füllstand bei jedem Takt neu berechnen.

Wie erinnere ich mich an den Pegel des letzten Taktes?

und verwenden Sie es, um einen Handel zu eröffnen

 
MK07:
Vielen Dank für Ihre Antwort, aber ich kann es nicht verwenden, da ich nicht alles verstehe und nicht sehr gut programmieren kann.

Sie schlagen vor, dass ich für Sie tun soll, womit Sie "spielen". Tut mir leid, kein Interesse.

Und wenn Sie gerade programmieren lernen, ist das eine interessante Aufgabe für Sie.

 
Einen guten Tag an alle. Ich habe ein Problem mit dem Indikator "CurrencyPowerMeter" und kann ihn nicht an eine andere Position im Terminalfenster verschieben. Wenn Sie helfen können, würde ich das sehr gerne tun.
 
Ich habe beschlossen, Ihnen eine Frage zu stellen, vielleicht können Sie sie mir beantworten. Ich schreibe einen Indikator, in dem Indikator verarbeite ich Ticks auf Ticks Zeitrahmen (die autonom öffnet,diese). Mein Puffer-Array verarbeitet nicht JEDEN Tick, sondern selektiv (z. B. alle 60 Sekunden, aber das ist nicht notwendig). Anstelle von
int    counted_bars=IndicatorCounted();

Ich verstehe die folgende Konstruktion:

extern int sec=60;//объявляем количество секунд
int i;//будет индексом текущей "свечи" (тика)
int i_prev;//будет индексом предыдущей "свечи" (тика), отстоящего от теущего на sec секунд назад
double MyBuffer[];//этот будет на чарте
double MyTemp[];//этот только для подсчётов

int init(){
   IndicatorBuffers(2);
   SetIndexBuffer(0,MyBuffer)
   SetIndexBuffer(1,MyTemp)
   SetIndexDrawBegin(0,14);
   i=Bars-1;
   while(Volume[i]-Volume[Bars-1]<sec) i--;//потому что в Volume[] на тиковом у нас время сервера точностью до секунды (а в Time[] - моделируемое для предоставления тиков на чарте)
   i_prev=Bars-1;//отошли от первого исторического тика на чарте на заданное количество секунд, запомнили его, запомнили первый, уходим в start()
   return(0);
}

int start(){
   double deltaHigh,deltaLow;
   int counted_bars=IndicatorCounted();//честно говоря, не уверен, т.к. считаем мы не все "свечи" (тики)
   if(counted_bars>=i) i=Bars-counted_bars-1;//аналогично
   while(i>=0){//цикл обработчика
      deltaHigh=High[i]-High[i_prev];//к примеру
      deltaLow=Low[i_prev]-Low[i];
      //и дальше код обработчика (формируем предварительный массив MyTemp[]). В конце цикла:
      i_prev=i;//запоминаем теперь текущий индекс как индекс предыдущего тика
      while(Volume[i_prev]-Volume[i]<sec){//и уходим вперёд на заданное количество секунд
         i--;
      }
   }
...

Nun die Frage. In der reinen M1-Version ist die nächste Sache Standard.

   if(counted_bars>0) counted_bars--;
   int limit=Bars-counted_bars;//принтовал, при первом обращении limit=Bars-2, при последующих limit=2
   for(i=0; i<=limit; i++){
      MyBuffer[i]=iMAOnArray(MyTemp, 0, 14, 0, MODE_EMA, i);

Wodurch sollen Limit und counted_bars ersetzt werden? Ich verstehe das so,

int counted_bars=ArraySize(MyTemp)-1;//сразу после цикла while

(weil die Anzahl der Ticks in 60 Sekunden nicht konstant ist, d.h. einfach int counted_bars=IndicatorCounted()/_Anzahl_der_Ticks_in_60_Sekunden_ zu schreiben wird nicht funktionieren).

Oder liege ich mit allem falsch?

p.s. Auf eine mögliche Frage werde ich antworten: Ich weiß, dass auf Forex sec!=60 nicht anwendbar ist, und sec=60 ist bedeutungslos, aber ich handle auch nicht auf Forex.

 
MK07:
Vielen Dank für Ihre Antwort, aber ich kann es nicht verwenden, da ich nicht alles verstehe und nicht gut programmieren kann. Könnten Sie bitte die notwendigen Änderungen an meinen Indikatorcodes vornehmen?
Entschuldigen Sie, haben Sie ein Auto? Wenn Sie eines haben, betrachten Sie es nicht als Luxus, sondern als Notwendigkeit, oder? Wenn nicht, werden Sie es nicht für den Rest Ihres Lebens so belassen, oder? Das ist das Alter, in dem man wissen muss, wie man ein Auto fährt. Ich bin nur ein Landwirt, aber ich tue, was ich tue. Für mich ist Programmieren nicht anders als Gartenarbeit, wie Schlosserarbeiten, die gleiche Arbeit mit meinen Händen (ich lebe auf dem Land). Eine Schubkarre, eine Schubkarre oder MQL4 sind für mich nur Werkzeuge. Vielleicht wird es von Stadtbewohnern anders wahrgenommen, ich weiß es nicht. Globale Variablen im Handbuch hier, Standard-Dateifunktionen hier, schneller diese, aber durch WinAPI. Ich wollte gestern schon antworten, habe es aber nicht getan.
 

Guten Tag zusammen!

Ich lerne die Verwendung von Arrays.

Ich habe ein Array, das ich mit Strings initialisiert habe, z.B. double mass [3567]={0.85374 , 0.85694 , 0.85974 , .... };

Und das Programm las das Array und führte es aus.

Jetzt habe ich das gleiche Array in einer Spalte initialisiert

double massi[3567]

{

Masse [ 0] = 0,85374;
Masse [ 1] = 0.85694;
Masse [ 2] = 0. 85974;
Masse [ 3] = 0.86174;
Masse [ 4] = 0,86474;
Masse [ 5] = 0,86494;
Masse [ 6] = 0,86504;

Masse [ 7] = 0,86524;

}

Der Compiler erzeugt keine Fehler, aber eine Warnung.

'{' - Ausdruck im globalen Bereich nicht erlaubt C:\Programmdateien\Alpari NZ MT4(2)\Experten\include\MASSIV.mqh (4, 2)

Das Array wird wie zuvor global deklariert (als es mit Strings initialisiert wurde und gut funktionierte).

 #include <MASSIV.mqh> 


 
int start()
{
 double Price=iOpen (Symbol (),0,0);         
 double SL=NormalizeDouble (Price+3000*Point, Digits);         
 double TP=NormalizeDouble (Price-100*Point, Digits);   

 double value =  Bid ;//параметру value функции ArrayBsearch присваивается значение  цены последнего тика
 double ld_Delta = 0.0010;
 int S = ArrayBsearch(  mass,  value, WHOLE_ARRAY,  0, MODE_ASCEND);//функция возвращает индекс значения цены макс. близкой к цене последнего тика 
 

 int last_order_bar = 0;
int ot = OrdersTotal();
...............................(остальной код опустил,но он  не изменился)

Es gibt nur 2 Einträge im Protokoll.

2013.04.12 16:14:44 XXX Test gestartet

2013.04.12 16:14:36 XXX EURUSD,H1: erfolgreich geladen


FRAGE:WARUM LIEST DAS PROGRAMM EIN IN EINER SPALTE INITIALISIERTES ARRAY NICHT.

Ich danke Ihnen.

Grund der Beschwerde: