Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 490

 
Kot:

Guten Tag!


Ich habe einen EA, der bestimmte Berechnungen durchführt. Es werden verschiedene mathematische Operationen, Arrays und Schleifen verwendet. Es speichert das Ergebnis in einer Datei. Es muss alles wieder von vorne beginnen, nachdem es alle Aktionen durchgeführt hat. Es hat alle Berechnungen einmal durchgeführt und hängt sich dann zum zweiten Mal auf, ohne dass eine weitere Aktion erfolgt. Können Sie mitteilen, ob es notwendig ist, Variablen auf Null zu setzen, Arrays zu löschen oder etwas anderes, bevor eine neue Berechnung gestartet wird?

Haben Sie versucht, die Datei zu schließen?

 
Guten Tag, ich brauche Hilfe für einen Menschenfreund (mich), der versucht, einen Indikator zu erstellen, ohne zu wissen, wie das geht))), aber ich habe eine Vorstellung davon, was erscheinen soll)) Also:
Wie programmiert man eine Krücke/Indikator/Skript (als Indikator mit Tabs "about, general, input parameters, colors, display") für MT4 so, dass es die Daten aus einer .csv-Datei übernimmt, z.B. das Format derQuelldatei:
EUR;TF;1.192;1.1733
EUR;TN;1.2037;1.1663
EUR;AB1;1.1906499615;1.1797479615
CHF;TF;1.0362;1.0183
CHF;TN;1.0479;1.0121
CHF;AB1;1.03484132734247;1.02549513556164


D.h.
der Indikator nimmt die aufgezeichneten Daten aus einer Datei und stellt sieals Liniensegment (TF, TA) oder als farbiges Band(EA) mit den Parametern des Umfangs gleich "ein Tag"dar.(von der Umrandung bis zur Umrandung der vertikalen Trennlinien der Tage auf МТ4), für die Zeilen Auswahl der Zeilenfarbe, des Zeilentyps, Auswahl der Textfarbe und der Kommentargröße und Ersetzung der Kommentarzeile als "TF - 1,192" durch die zweite Zeile "TF - 1,1733", die aus den entsprechenden Zeilen der Datei übernommen werden. Der Bereich ist rein horizontal und nimmt von der Zeile EUR;TF;1.192;1,1733 die erste Ziffer für einen Slot und die zweite Ziffer für den zweiten als Beginn des Slots 1.192 und das Ende des Slots 1.192.
Es gibt auch Bereiche, zum Beispiel EA, das Prinzip ist das gleiche von Anfang bis Ende des Tages, aber der Preis ist anders und die Linie beginnt und endet mit CHF;AB1;1.03484132734247;1.02549513556164 Anfang ist
1.03484132734247 Ende des Bereichs1.02549513556164. Er läuft beim Einschalten von MT4 (als üblicher Indikator auf dem Gafik), jeden Tag auf dem Chart und fügt alle Daten genau für den aktuellen Tag einmal hinzu, alle früher angelegten Linien werden nicht aus dem Chart gelöscht und duplizieren ihn nicht. Dabei wählt er alle Segmente und Bereiche für den Tag aus und zeigt sie an, und zwar nur dort, wo sich das aktive Fenster gerade befindet, und in anderen aktiven Fenstern (d.h. dort, wo er gerade läuft) (d.h. er öffnete ein Paar und der Indikator zeichnete alle Segmente und Bereiche des aktuellen Tages und beruhigte sich usw. für die Paare).

Zum Beispiel, wie sollte die Registerkarte des IndikatorsEingabeparameteraussehen:

Переменная________Значение
Funtik________//--Общие настройки--//
Zeichnen TF________true
TN zeichnen _______true
Zeichnen AB1______true
Zeichnen AB2______false
Farbe der Textbeschriftung _______Black
Шрифт подписей__________________Arial
Schriftgröße für Textbeschriftungen ________9
TF-Linienfarbe ______________
Leitungstyp TF _______________
TN Linienfarbe ______________
Leitungstyp TN _______________
Bandfarbe AB1__________
Bandfarbe AB2__________
Dateihäufigkeit in Sekunden002
Dateiname ___________5.csv

versucht, mich zu kritzeln, aber nicht bekommen eine verdammte Sache, obwohl schien einfach (aber ich bin ein Menschenfreund, was kann man tun....) Hilfe bitte ertrinken !!!!!!!!


//+------------------------------------------------------------------+
//|                                                        Funtik.mq4 |
//|                      Copyright © 2008, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
 
#property indicator_chart_window
//---- input parameters
extern string    Funtik="5.csv";
//+------------------------------------------------------------------+
//| extern variables                                       |
//+------------------------------------------------------------------+
extern  bool    РисоватьTB = false      ;
extern  bool    РисоватьTN = false      ;
extern  bool    РисоватьTF = false      ;
extern  bool    РисоватьAB1 = false     ;
extern  bool    РисоватьAB2 = false     ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
//----
      int handle,sst=1;
     double  NameCena;
     string NameF ,NameTi,NameFT;
      bool h1;
      
   while(sst>0)
                 {
   handle=FileOpen(Funtik,FILE_CSV|FILE_READ,';');
 //  Comment ("Файл ",Funtik,"открыт");
   if(handle>=0)
    {
     NameF=FileReadString(handle);           // Читается наименование бумаги
     NameTi=FileReadString(handle);          // Читается первая котировка и подставляется в начало первого отрезка линии или диапазона
     NameCena=FileReadNumber(handle);        // Читается цена последней котировки для первого отрезка линии или диапазона
     NameFT=FileReadString(handle);          // Читается последняя котировка для диапазона
     
     Alert(NameF," ",NameTi," ",NameCena," ",NameFT);
       if(FileIsEnding(h1))
       {
     FileClose(h1);
     return(false);
     sst=0;
       }
    }
               }
     FileClose(handle);   
 
  //fComment(Funtik);
//----
   return(0);
  }
//+------------------------------------------------------------------+

 

Hallo!

Bitte helfen Sie mir, einen Fehler im folgenden Programm zu finden!!!

//+------------------------------------------------------------------+
//|Test.mq4 |
//| Copyright 2018, MetaQuotes Software Corp.
//|https://www.mql5.com ||
//+------------------------------------------------------------------+
#property copyright "365_MA"
#property link "https://www.mql5.com"
#Eigenschaft Version "1.00"
#Eigenschaft streng

extern Periode_MA = 365; //Periode MA 1
extern double Delta = 0.0010; //Der Abstand, bei dem der Auftrag geöffnet werden kann

string Symb; //Name des Handelsinstruments
//int Gesamt; //Anzahl der Aufträge

//+------------------------------------------------------------------+
//| Experten-Initialisierungsfunktion|
//+------------------------------------------------------------------+
int init()
{
//----

//----
zurück(0);
}
//+------------------------------------------------------------------+
//| Experten-Deinitialisierungsfunktion|
//+------------------------------------------------------------------+
int deinit()
{
//----
ObjectDelete("Obj_Label");
ObjectDelete("Obj_Label2");
//----
zurück(0);
}
//+------------------------------------------------------------------+
//| Expertenstartfunktion|
//+------------------------------------------------------------------+
int start()
{



double prise = Bid;//aktueller Preis
double CurrMAValue = iMA(Symb, Period(),Period_MA, 0,Mode_EMA, PRICE_CLOSE, 0); //der Wert des gleitenden Durchschnitts
double Price2MA = Preis - CurrMAValue;//Abstand zwischen MA und Preis
datetime NextClose = Time(0) + Period()*60*2;//Zeit zum Schließen
int MinutesToNextClose = (NextClose - TimeCurrent())/60 + 1; //Zeit bis zum Schließen in Minuten

//int err;



//Auffrischung der Textinformationen im Diagramm

ObjectSetText ("Obj_Label", "TF" + Period() + ", " + DoubleToStr(price, 4) + ", tick " + TimeToStr(TimeCurrent(), TIME_SECONDS) + ", O@" + TimeToStr(Time[0], TIME_MINUTES) + ", NC@" + TimeToStr(NextClose, TIME_MINUTES) + " (" + MinutesToNextClose + " min)", 10,
ObjectSetText ("Obj_Label2", "Delta " + DoubleToStr(Delta,4) + ", MA-Wert " + DoubleToStr(CurrMAValue, 4) + ", Abstand zum MA " + DoubleToStr(Price2MA, 4), 10, "Arial", DarkGreen );
//Berücksichtigung des Preises und Erzeugung von Warnmeldungen

wenn ((MathAbs(Price2MA) < Delta) && // wenn der Abstand zu МА kleiner als Delta ist
(Preis > CurrMAValue) && // und der Preis ist höher als MA
(Open(0) > CurrMAValue+Delta) // und die aktuelle Kerze öffnete höher als MA+Delta
(
Alert ("Preis nähert sich dem MA von oben;)
)

wenn ((MathAbs(Price2MA) < Delta) && // wenn der Abstand zum MA kleiner als das Delta ist
(Preis < CurrMAValue) && // und der Preis liegt unter dem MA
(Open(0) < CurrMAValue-Delta)) // und die aktuelle Kerze öffnete unterhalb des MA-Deltas
(

Warnung ("Der Kurs hat sich unter den MA bewegt;)
)

zurück(0);


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

Nach dem Kompilieren tritt folgender Fehler auf

Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
Задавайте вопросы по техническому анализу, обсуждайте торговые системы и улучшайте свои навыки программирования торговых стратегий на языке MQL5. Общайтесь и обменивайтесь опытом на форуме с трейдерами всего мира и помогайте ответами новичкам — наше сообщество развивается вместе с вами. Куда исчезли "Сообщения"? У меня в профиле исчез раздел...
Dateien:
Error.jpg  60 kb
 
berkley75:

Hallo!

Bitte helfen Sie mir, einen Fehler im folgenden Programm zu finden!!!


Nach dem Kompilieren tritt der folgende Fehler auf.

//+------------------------------------------------------------------+
//|                                                         test.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "365_MA"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

extern int    Period_MA = 365;  //Период МА 1
extern double Delta = 0.0010;   //На каком расстоянии открывать ордер

string Symb;                  //Название торгового инструмента
//int Total;                  //количество ордеров

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
 {
//----
 
//----
   return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
 {
//----
   ObjectDelete("Obj_Label");
   ObjectDelete("Obj_Label2");
//----
   return(0);
}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
 {
   
 

double prise = Bid;                                                             //текущая цена
double CurrMAValue = iMA(Symb, Period(),Period_MA, 0,Mode_EMA, PRICE_CLOSE, 0); //значение скользящей средней
double Price2MA = price - CurrMAValue;                                          //расстояние о МА до цены
datetime NextClose = Time(0) + Period()*60*2;                                   //время до закрытия
int MinutesToNextClose = (NextClose - TimeCurrent())/60 + 1;                    //время до закрытия в минутах

//int err;



//обновление текст информации на графике

ObjectSetText ("Obj_Label", "ТФ" + Period() + ", " + DoubleToStr(price, 4) + ", тик " + TimeToStr(TimeCurrent(), TIME_SECONDS) + ", O@" + TimeToStr(Time[0], TIME_MINUTES) + ", NC@" + TimeToStr(NextClose, TIME_MINUTES) + " (" + MinutesToNextClose + " min)", 10,
ObjectSetText ("Obj_Label2", "Дельта " + DoubleToStr(Delta,4) + ", знач МА " + DoubleToStr(CurrMAValue, 4) + ", расст до МА " + DoubleToStr(Price2MA, 4), 10, "Arial", DarkGreen );
//анализ цены и выдача алертов

if ((MathAbs(Price2MA) < Delta) &&   // если расстоание до МА меньше дельты
   (Price > CurrMAValue) &&          // и цена выше МА
   (Open(0) > CurrMAValue+Delta))    // и текущая свеча открылась выше, чем МА+дельта
( 
   Alert ("Цена подощла к МА сверху");
)

if ((MathAbs(Price2MA) < Delta) &&   // если расстояние до МА меньше дельты
   (price < CurrMAValue) &&          // и цена ниже МА
   (Open(0) < CurrMAValue-Delta))    // и текущая свеча открылась ниже, чем МА-дельта
( 

   Alert ("Цена подошла к МА снизу");
)

   return(0);
}
   
   
//+------------------------------------------------------------------+


Es wurde eine geschweifte Klammer ausgelassen.

 
Bitte beraten Sie mich, wie man den Fehler der ungültigen Lots-Menge für die Funktion FreeMarginCheck in EA beheben kann, wenn versehentlich ein negativer Volumenwert (Lot) eingestellt wird. Um eine Meldung über ein falsches Los, ohne Fehlermeldung, im Prüfgerät zu haben
 
Roman Sharanov:

Ich muss Zigzag in meinen eigenen Indikator integrieren (jetzt zählt er nach Griff)

Die Sache ist die, dass mein Indikator OnCalculate() nicht verwendet.

Wie kann ich also den Zickzackkurs realisieren und wie erhalte ich rates_total und prev_calculated?

rates_total ist die Anzahl der Balken im Diagramm. Sie wird mit Hilfe der Funktion Balken ermittelt.

prev_calculated - erstellen Sie selbst ein Analogon, deklarieren Sie es global (oder statisch) und schreiben Sie dort die tatsächlich berechnete Anzahl der Balken in der aktuellen Iteration. Das bedeutet, dass wir nach erfolgreicher Berechnung der Indikatorwerte die Anzahl der aktuellen Balken in den Indikator eintragen müssen. Wenn die Berechnungen nicht erfolgreich sind, ist es besser, sie zu annullieren, um bei der nächsten Iteration die Indikatorwerte für jeden Balken in der Historie neu zu berechnen.

 

Re: Alekseu Fedotov

Was ist eine Klammer, sorry

 
berkley75:

Re: Alekseu Fedotov

Was ist eine Klammer, sorry

In Klammern steht das Argument der Funktion sin(30)
In eckigen Klammern der Index des Feldes x[25].
void start()
{
In geschweiften Klammern Operator-Block
}
 
Hallo, könnten Sie mir bitte sagen, wie ich ein bestimmtes Symbol im Fenster "Marktübersicht" anzeigen/entfernen kann?
 
STARIJ:
In Klammern das Argument der Funktion sin(30)
in eckigen Klammern der Index des Feldes x[25]
void start()
{
In geschweiften Klammern Operator-Block
}
Danke, aber es lässt sich immer noch nicht kompilieren! Selbst wenn Sie eine geschweifte Klammer an das Ende setzen, was ich bemerkt habe!!!!