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

 
Liebe Programmiererinnen und Programmierer, eine große Bitte: Helft mit, ein Stück Code für den Roboter zu schreiben! Der Roboter handelt mit zwei Flügeln. Wenn sie sich kreuzen, wird eine Position eröffnet und bei der entgegengesetzten Kreuzung wieder geschlossen. Er muss jedoch eine weitere Position am gegenüberliegenden Crossover eröffnen. Wenn er also "Kaufen" schließt, sollte der Roboter sofort "Verkaufen" öffnen und umgekehrt!
Dateien:
 
lufer:
Danke, aber es funktioniert nicht mit Mas[N]; in OnInit(), ich habe es schon versucht.
Nun, es tut mir leid, ich war gestern nicht ganz nüchtern. Oder nicht sehr nüchtern.
 
AlexeyVik:
Es tut mir leid, ich war gestern Abend nicht ganz nüchtern. Oder nicht sehr nüchtern.
)), passiert es.
 

Angenommen, ich möchte, dass das Array mit Daten aus einem Indikator (z. B. ATR) von jedem Bar ab dem ersten gebildeten Bar (#1) gefüllt werden? Das heißt, das Array ist deklariert und die Startfunktion initialisiert es bereits. Wie macht man es richtig?

wie hier?

for(int i=0; i<N; i=i++)

{

Mas[i]=iATR(NULL,0,1,i+1);

}

Oder es kann über erfolgen:

for(int i=0; i<N; i=i++)

{

ArrayFill(Mas,i,1,iATR(NULL,0,1,i+1))

}

oder etwas ganz anderes?, bisher habe ich nicht in irgendeiner Weise gelungen(, etwas falsch, bitte beraten, ich danke Ihnen im Voraus.

 
lufer:

Angenommen, ich möchte, dass das Array mit Daten aus einem Indikator (z. B. ATR) von jedem Bar ab dem ersten gebildeten Bar (#1) gefüllt werden? Das heißt, das Array ist deklariert und die Startfunktion initialisiert es bereits. Wie macht man es richtig?

wie hier?

for(int i=0; i<N; i=i++)

{

Mas[i]=iATR(NULL,0,1,i+1);

}


Der erste Fall ist ausreichend. Wenn Sie jedoch Werte ab dem ersten Takt benötigen, wäre es ratsam, die Schleife ebenfalls ab 1 zu zählen.
 
evillive:
Die erste Option ist ausreichend. Wenn wir jedoch Werte ab dem ersten Takt benötigen, wäre es sinnvoller, den Zyklus ab 1 zu zählen.
Ich habe es sowohl mit 1 als auch mit 0 probiert, trotzdem stimmt etwas nicht, die Werte werden nicht geschrieben, wenn ich darum bitte, welche auszugeben, gibt es nur Nullen
 
lufer:
Ich habe es sowohl mit 1 als auch mit 0 probiert, trotzdem stimmt etwas nicht, es werden keine Werte geschrieben, wenn ich darum bitte, welche auszugeben, werden nur Nullen ausgegeben
Bitte zeigen Sie mir den Ausgabecode.
 
evillive:
Zeigen Sie den Code an, um nach der Ausgabe zu fragen.

Ich zeige Ihnen den gesamten Code, nur für den Fall:

//+------------------------------------------------------------------+

extern int    N        =100;                       // Количество баров

       int    Mas[];                             // Объявление массива

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+

int OnInit()
  { 
     ArrayResize(Mas,N,0);                // Установка размера массива      
  }

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+

void OnDeinit(const int reason)
  {

  }

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+

void OnTick()
  {                                       
   for(int i=0; i<N; i=i++)                     // Цикл записи данных
     {                      

          Mas[i]=iATR(NULL,0,1,i+1);           // Вычисление значений          
     }
       Alert(Mas[0],"," ,Mas[50],"," ,Mas[99]);      // Вывод на экран
   return;                                           // Выход из start
  }
//+------------------------------------------------------------------+

 

SRC zum Einfügen von Code verwenden

 
lufer:

Ich zeige Ihnen den gesamten Code, nur für den Fall:


ein Array vom Typ double erstellen
 
evillive:
ein Array vom Typ double erstellen
Dies löst das Problem nicht, jetzt scheint etwas inOnTick() falsch zu sein- wenn ich den EA im Terminalfenster lade, passiert nichts, und wenn ich versuche, ihn zu löschen, bleibt das Terminal sehr lange stehen und löscht ihn dann nach einer Weile. Ich habe versucht, einigen Elementen manuell Werte zuzuweisen, alles ist in Ordnung. Irgendetwas am Array-Initialisierungszyklus scheint falsch zu sein.