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

 
trader781:
Ich verwende noch keine Klassen, Arrays, Makros und importiere nicht aus Windows-Bibliotheken. Alles zu seiner Zeit.
Du hättest es nicht mit Arrays machen sollen. Arrays sind praktisch. Das gilt auch für die Strukturen. Den Rest werden Sie vielleicht gar nicht verwenden, wenn die Projekte nicht sehr komplex sind.
 
Vitalie Postolache:
Bei Arrays ist das eine Verschwendung. Arrays sind praktisch. Das gilt auch für die Strukturen. Der Rest, ja, kann überhaupt nicht verwendet werden, wenn die Projekte nicht komplex sind.
Was Arrays angeht, so stimme ich zu, dass sie sehr praktisch sind und man oft kein vernünftiges Programm ohne sie schreiben kann. Strukturen... Ich verwende gerne Klassen in Web-Programmen, es ist wirklich nicht bequem, vor allem, wenn das Projekt groß ist, und ich mag es nicht, MQ in üblichen einseitigen Expert Advisor zu verwenden. Ich habe in OOP alle Daten auf offen / geschlossen geschrieben, begann mit und löschte alles, neu geschrieben in prozeduralen Stil und mit, schrieb alles in einer Schleife. Der Unterricht ist also ein wenig gewöhnungsbedürftig.
 
Vitaly Muzichenko:
Ich stimme zu, dass Arrays sehr praktisch sind, und man kann oft kein vernünftiges Programm ohne sie schreiben. Strukturen... Ich schreibe Klassen in Web-Programmen, es ist wirklich schlecht und nicht bequem ohne sie, vor allem, wenn das Projekt ist groß, aber ich mochte nicht MQ in üblichen einseitigen Expert Advisor. Ich habe in OOP alle Daten auf offen / geschlossen geschrieben, begann mit und löschte alles, neu geschrieben in prozeduralen Stil und mit, schrieb alles in einer Schleife. Der Unterricht ist also etwas für Liebhaber.
Hmmm. Was hat das mit dem Unterricht zu tun? Strukturen und Klassen sind ein bisschen was anderes. Ich habe über Strukturen geschrieben. MqlRates und so weiter und so fort...
 

Bitte helfen Sie mir, die maximale Anzahl offener Bestellungen hinzuzufügen (MAXORders)


//
extern string rem2 = "=== Anzahl der Lose ===";
extern double _Lots0_1 = 0,1; // Basisebene (für die 1. Ordnung)
extern double _Lots0_2 = 0,1; // Basisebene (für die 2. Ordnung)
//
extern string rem3 = "=== Zusätzliche Parameter ===";
extern int _TakeProfit1_Proc = 50; // Prozentuales Risiko für Take-Profit der 1. Order
extern int _SpaseFromMaxMin = 1; // Versatz von oben/unten
//
extern string rem4 = "=== Breakeven-Parameter ===";
extern bool _IsStopLoss_0 = falsch; // Aktivieren der Verwendung des Breakeven-Levels
extern int _StopLoss_0_From = 0; // Offset vom Break-Even-Level (in Punkten)
extern int _StopLoss_0_Level = 15; // Breakeven-Niveau
//
extern string rem5 = "=== Trailing-Stop-Parameter ===";
extern bool _IsTrailingStop = falsch; // Trailing-Stop aktivieren
bool _IsTrailingStopProfit = wahr; // Aktivieren eines Trailing Stops von einer Breakeven-Position
//extern int _TrailingStopProfit_From = 0; // Offset vom Break-Even-Level (in Punkten)
extern int _TrailingStopLevel = 15; // Trailing-Stop-Level
extern int _TrailingStopStep = 5; // Trailing-Stop-Bewegungsschritt
//
extern string rem6 = "=== Werkzeugeinstellungen ===";
extern string _Symboll = ""; // Symbolischer Name des Instruments: "" - aktuelles Symbol
extern int _Timeframe = 0; // Periode: 0 - Periode des aktuellen Charts
int_Digitss; // Anzahl der Nachkommastellen im Preis
doppelte _Punkte; // Punktgröße in Kurswährung
extern int _Slippage = 2; // Schlupf
extern int _Magic1 = 1281; // Eindeutige Anzahl von EA-Bestellungen (1. Bestellung)
extern int _Magic2 = 1282; // Eindeutige Anzahl von EA-Bestellungen (2. Bestellung)
//
extern string rem7 = "=== Parameter des MA1-Indikators ===";
extern int _MA1_Zeitrahmen = PERIODE_D1; // Periode: 0 - Periode des aktuellen Charts
extern int _MA1_Periode = 20; // Mittelungszeitraum für die Berechnung des gleitenden Durchschnitts
extern int _MA1_Shift = 0; // Verschiebung des Indikators relativ zum Kurschart
extern int _MA1_Methode = 0; // Mittelungsmethode: 0 - SMA, 1 - EMA, 2 - SMMA, 3 - LWMA
extern int _MA1_Applied_Price = 0; // Verwendeter Preis: 0 - schließen, 1 - öffnen, 2 - hoch, 3 - niedrig
//
extern string rem8 = "=== Parameter des MA2-Indikators ===";
extern int _MA2_Zeitrahmen = PERIODE_H4; // Periode: 0 - Periode des aktuellen Charts
extern int _MA2_Period = 20; // Mittelungszeitraum für die Berechnung des gleitenden Durchschnitts
extern int _MA2_Shift = 0; // Verschiebung des Indikators relativ zum Kursdiagramm
extern int _MA2_Methode = 0; // Mittelungsmethode: 0 - SMA, 1 - EMA, 2 - SMMA, 3 - LWMA
extern int _MA2_Applied_Price = 0; // Verwendeter Preis: 0 - schließen, 1 - öffnen, 2 - hoch, 3 - niedrig
//
extern string rem9 = "=== Parameter des Bollinger-Bänder-Indikators ===";
//extern int _BB_Timeframe = 0; // Periode: 0 - Periode des aktuellen Charts
extern int _BB_Period = 20; // Mittelungszeitraum der Hauptindikatorlinie
extern int _BB_Abweichung = 2; // Abweichung von der Hauptlinie
extern int _BB_Bands_Shift = 0; // Verschiebung des Indikators relativ zum Kurschart
extern int _BB_Applied_Price = 0; // Gebrauchtpreis: 0 - schließen
//
extern string rem10 = "=== Parameter des ZigZag-Indikators ===";
//extern int _ZZ_Timeframe = 0; // Periode: 0 - Periode des aktuellen Charts
extern int _ZZ_ExtDepth = 12;
extern int _ZZ_ExtDeviation = 5;
extern int _ZZ_ExtBackstep = 3;
//
datetime_TimePrevious;
datetime _TimeCurrent;
//
string_fstr;
int_tp;
//



void MaxOrders(int max_orders=5);










//=++========================================= = ================++=
int init()
{
if(_Symbol == "") _Symboll = Symbol();
//
_Digitss = MarketInfo(_Symbol, MODE_DIGITS);
_Punkte = MarketInfo(_Symbol, MODE_POINT);
//
if(_Timeframe == 0) _Timeframe = Periode();
Print("v128-2 > init() >> _Timeframe=", _Timeframe,
"rem4=",_IsStopLoss_0,
"rem5=",_IsTrailingStop,_IsTrailingStopProfit);
//
_fstr = "v128_";
_tp = _FileReadWriteDouble(_fstr+"_tp.dat", 0); // Stellen Sie sicher, dass die Datei existiert, wenn sie nicht existiert, erstellen Sie sie
Print("v128-2 > init() >> _Timeframe=", _Timeframe, " _tp=",_tp);
//
_TimePrevious=iTime(_Symbol, _Timeframe, 0);
//
Print("v128-2 > Done: init() >> _TimePrevious=", _TimePrevious, " (", TimeToStr(_TimePrevious,TIME_DATE|TIME_MINUTES), ")");
Rückgabe (0);
}


//=++========================================= = ================++=
int start()
{
doppelt P_Close1, P_Close2;
doppelt BB_1_oben, BB_1_unten;
doppelt MA1_0, MA2_0;
doppeltes P_ask, P_bid;
bool is_signal_2_buy, is_signal_2_sell;
doppelt P1_kaufen, P2_kaufen, P3_kaufen;
doppelt P1_verkaufen, P2_verkaufen, P3_verkaufen;
bool is_b1 = falsch, is_s1 = falsch;
bool is_b2 = falsch, is_s2 = falsch;
int-Ticket;
//
_TimeCurrent = iTime(_Symbol, _Timeframe, 0);
if(_TimeCurrent != _TimePrevious)
{
MA1_0 = iMA(_Symbol, _MA1_Timeframe, _MA1_Period, _MA1_Shift, _MA1_Method, _MA1_Applied_Price, 0);
MA2_0 = iMA(_Symbol, _MA2_Timeframe, _MA2_Periode, _MA2_Shift, _MA2_Method, _MA2_Applied_Price, 0);
BB_1_upper = iBands(_Symbol, _Timeframe, _BB_Period,_BB_Deviation,_BB_Bands_Shift,_BB_Applied_Price, MODE_UPPER, 1);
BB_1_lower = iBands(_Symbol, _Timeframe, _BB_Period,_BB_Deviation,_BB_Bands_Shift,_BB_Applied_Price, MODE_LOWER, 1);
P_Close1 = iClose(_Symbol, _Timeframe, 1);
P_Close2 = iClose(_Symbol, _Timeframe, 2);
P_ask = MarketInfo(_Symbol, MODE_ASK);
P_bid = MarketInfo(_Symbol, MODE_BID);
Print("v120-4 > ", _Symbol, " | ", _Zeitrahmen,
" -> MA1_0=", MA1_0, " | MA2_0=", MA2_0,
" -> BB_1_upper=", BB_1_upper, " | BB_1_lower=", BB_1_lower,
" -> P_Close1=", P_Close1, " | P_Close2=", P_Close2,
" -> ask=", P_ask, " | bid=", P_bid);
//
is_signal_2_buy = P_bid >= MA1_0 && P_bid >= MA2_0 && P_Close1 >= BB_1_lower && P_Close2 <= BB_1_lower && P_bid >= BB_1_lower;
is_signal_2_sell = P_bid <= MA1_0 && P_bid <= MA2_0 && P_Close1 <= BB_1_upper && P_Close2 >= BB_1_upper && P_bid <= BB_1_upper;
Print("v128-2 > ", _Symbol, " | ", _Zeitrahmen,
" -> is_signal2 -> buy=", is_signal_2_buy, " | sell=", is_signal_2_sell);
// ========== nach Märkten
// ========== Eröffnen einer KAUF-Order
if( is_signal_2_buy )
{
Print("v128-2 > ", _Symbol, " | ", _Zeitrahmen,
" -> Signal zum Eröffnen einer KAUF-Order");
BestellungenDeleteAll(OP_SELL);
//
if(!is_b1 || !is_b2)
{
P1_kaufen = P_fragen;
P3_buy = FindPriceMinMax(false) - (_SpaseFromMaxMin) * _Point;
_tp = (P1_buy - P3_buy) / _Point * (_TakeProfit1_Proc / 100.0);
P2_buy = DoubleTestZero(_tp, P1_buy + (_tp) * _Point);
//
_FileWriteDouble(_fstr+"_tp.dat", _tp);
//
Print("v128-2 > ", _Symbol, " | ", _Zeitrahmen,
" -> KAUFEN -> P1_kaufen=", P1_kaufen, " | P2_kaufen=", P2_kaufen, " | P3_kaufen=", P3_kaufen, "_tp=", _tp);
//
Ticket = OrderSend(_Symbol, OP_BUY, _Lots0_1, ND(P1_buy), _Slippage, ND(P3_buy), ND(P2_buy),
NULL, _Magic1, 0, CLR_NONE);
if(Ticket == -1)
Print("v128-2 > ", _Symbol, " | ", _Zeitrahmen,
" -> KAUFEN (1) > Fehler (Eröffnung) #", GetLastError());
Sonst ist_b1 = wahr;
//
Ticket = OrderSend(_Symbol, OP_BUY, _Lots0_2, ND(P1_buy), _Slippage, ND(P3_buy), 0,
NULL, _Magic2, 0, CLR_NONE);
if(Ticket == -1)
Print("v128-2 > ", _Symbol, " | ", _Zeitrahmen,
" -> KAUFEN (2) > Fehler (Eröffnung) #", GetLastError());
Sonst ist_b2 = wahr;
//
}
Sonst { is_b1 = wahr; is_b2 = wahr; }
}
Sonst { is_b1 = wahr; is_b2 = wahr; }
//Print("= kaufen +++",is_b1,is_b2,"==",is_s1,is_s2);
// ========== Eröffnen einer VERKAUFS-Order
if( is_signal_2_sell )
{
Print("v128-2 > ", _Symbol, " | ", _Zeitrahmen,
" -> Signal zum Öffnen einer VERKAUFS-Order");
BestellungenDeleteAll(OP_BUY);
//
if(!is_s1 || !is_s2)
{
P1_verkauf = P_gebot;
P3_sell = FindPriceMinMax(true) + (_SpaseFromMaxMin) * _Point;
_tp = (P3_sell - P1_sell) / _Point * (_TakeProfit1_Proc / 100.0);
P2_sell = DoubleTestZero(_tp, P1_sell - (_tp) * _Point);
//
_FileWriteDouble(_fstr+"_tp.dat", _tp);
//
Print("v128-2 > ", _Symbol, " | ", _Zeitrahmen,
" -> KAUFEN -> P1_sell=", P1_sell, " | P2_sell=", P2_sell, " | P3_sell=", P3_sell);
//
Ticket = OrderSend(_Symbol, OP_SELL, _Lots0_1, ND(P1_sell), _Slippage, ND(P3_sell), ND(P2_sell),
NULL, _Magic1, 0, CLR_NONE);
if(Ticket == -1)
Print("v128-2 > ", _Symbol, " | ", _Zeitrahmen,
" -> VERKAUFEN (1) > Fehler (Eröffnung) #", GetLastError());
Sonst ist_s1 = wahr;
//
Ticket = OrderSend(_Symbol, OP_SELL, _Lots0_2, ND(P1_sell), _Slippage, ND(P3_sell), 0,
NULL, _Magic2, 0, CLR_NONE);
if(Ticket == -1)
Print("v128-2 > ", _Symbol, " | ", _Zeitrahmen,
" -> VERKAUFEN (2) > Fehler (Eröffnung) #", GetLastError());
Sonst ist_s2 = wahr;
//
}
Sonst { is_s1 = wahr; is_s2 = wahr; }
}
Sonst { is_s1 = wahr; is_s2 = wahr; }
//Print("= verkaufen +++",is_b1,is_b2,"==",is_s1,is_s2);
// ==========
if(ist_b1 && ist_s1 && ist_b2 && ist_s2)
_TimePrevious=_TimeCurrent;
}
//
if(_IsTrailingStop)
{
if( !FindOrders(_Magic1) ) TrailingStop(_tp);
}
//
if(_IsStopLoss_0)
StopLoss_0(_StopLoss_0_From);
//
Rückgabe (0);
}


//=++========================================= = ================++=
double DoubleTestZero(double value, double new_value)
{
if(value==0) return(wert);
sonst return(new_value);
}


//=++========================================= = ================++=
doppelt ND (doppelter Wert)
{
return( NormalizeDouble(value, _Digits) );
}


//=++========================================= = ================++=
// Orders schließen. Ende mit Alle schließen
ungültige BestellungenDeleteAll(int cmd)
{
while(CountOrders(cmd) > 0)
{
for(int i = OrdersTotal() - 1; i >= 0 ; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if( (OrderSymbol() == _Symbol)
&& (OrderMagicNumber() == _Magic1 || OrderMagicNumber() == _Magic2)
&& (OrderType() == cmd) )
{
if(OrderType() == OP_BUY)
if(!OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), _Slippage, CLR_NONE))
Print("v128-2 > ", _Symbol, " > KAUFEN -> ticket=", OrderTicket(),
" -> Fehler (Schließen) #", GetLastError());
if(OrderType() == OP_SELL)
if(!OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), _Slippage, CLR_NONE))
Print("v128-2 > ", _Symbol, " > SELL -> ticket=", OrderTicket(),
" -> Fehler (Schließen) #", GetLastError());
}
}
}

}

}



//=++========================================= = ================++=
// Zählen der Anzahl der Bestellungen in der Richtung
int CountOrders(int cmd)
{
Ganzzahl n = 0;
for(int i = OrdersTotal() - 1; i >= 0 ; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if( (OrderSymbol() == _Symbol)
&& (OrderMagicNumber() == _Magic1 || OrderMagicNumber() == _Magic2)
&& (OrderType() == cmd) ) n++;
}
}
Rückkehr (n);
}


//=++========================================= = ================++=
// magisch nach einer Bestellung suchen
bool FindOrders(int magisch)
{
for(int i = OrdersTotal() - 1; i >= 0 ; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if( (OrderSymbol() == _Symbol) && (OrderMagicNumber() == magic) )
zurück (wahr);
}
}
falsch zurückgeben);
}


//=++========================================= = ================++=
// Berechnung der Gewinnschwelle durch Magie
void StopLoss_0(int von)
{
doppelter Gewinnpunkt, bieten, fragen;
bool ist;
doppelt P3_Kauf, P3_Verkauf;
//
for(int i = OrdersTotal() - 1; i >= 0 ; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(!( (OrderSymbol() == _Symbol) && (OrderMagicNumber() == _Magic1 || OrderMagicNumber() == _Magic2) )) Continue;
//
if(OrderType() == OP_BUY)
{
Gebot = MarketInfo(_Symbol, MODE_BID);
Gewinnpunkt = (Gebot - OrderOpenPrice()) / _Point;
ist = Gewinnpunkt >= _StopLoss_0_Level + von;
P3_buy = ND( OrderOpenPrice() + from * _Point );
//
if( ist && ( OrderStopLoss() == 0 || OrderStopLoss() < P3_buy ) )
{
Print("v128-2 b4 >", _Symbol, " | ", _Zeitrahmen,
" -> Bid=", MarketInfo(_Symbol, MODE_BID),
" | p/o=", OrderOpenPrice(), " | s/l=", OrderStopLoss(), " | P3_buy=", P3_buy,
" | d=", _StopLoss_0_Level, " | profitpoint=", profitpoint);
if(!OrderModify(OrderTicket(), OrderOpenPrice(), P3_buy, OrderTakeProfit(), 0, CLR_NONE))
Print("v128-2 b4 > ", _Symbol, " | ", _Zeitrahmen,
" -> KAUFEN > ticket=", OrderTicket(), " > Fehler (Breakeven) #", GetLastError());
}
}
//
sonst if(OrderType() == OP_SELL)
{
fragen = MarketInfo(_Symbol, MODE_ASK);
profitpoint = (OrderOpenPrice() - fragen) / _Point;
ist = Gewinnpunkt >= _StopLoss_0_Level + von;
P3_sell = ND( OrderOpenPrice() - from * _Point );
//
if( ist && ( OrderStopLoss() == 0 || OrderStopLoss() > P3_sell ) )
{
Print("v128-2 b4 >", _Symbol, " | ", _Zeitrahmen,
" -> Ask =", MarketInfo(_Symbol, MODE_ASK),
" | p/o=", OrderOpenPrice(), " | s/l=", OrderStopLoss(), " | P3_sell=", P3_sell,
" | d=", _StopLoss_0_Level, " | profitpoint=", profitpoint);
if(!OrderModify(OrderTicket(), OrderOpenPrice(), P3_sell, OrderTakeProfit(), 0, CLR_NONE))
Print("v128-2 b4 > ", _Symbol, " | ", _Zeitrahmen,
" -> VERKAUFEN -> ticket=", OrderTicket(), " > Fehler (Breakeven) #", GetLastError());
}
}
}
}
}


//=++========================================= = ================++=
// Herausarbeiten des Trailing-Stops durch Magie
void TrailingStop(int von)
{
doppelter Gewinnpunkt, bieten, fragen;
doppelter Preis;
//
for(int i = OrdersTotal() - 1; i >= 0 ; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(!( (OrderSymbol() == _Symbol) && (OrderMagicNumber() == _Magic1 || OrderMagicNumber() == _Magic2) )) Continue;
//
if(OrderType() == OP_BUY)
{
if(_IsTrailingStopProfit) fromprice = OrderOpenPrice() + from * _Point;
sonst fromprice = OrderStopLoss();
//
Gebot = MarketInfo(_Symbol, MODE_BID);
profitpoint = (bid - ND(fromprice)) / _Point;
//
if( profitpoint >= _TrailingStopLevel &&
Gebot > (OrderStopLoss() + (_TrailingStopLevel + _TrailingStopStep) * _Point) )
{
Print("v128-2 v4 >", _Symbol, " | ", _Zeitrahmen,
" -> Bid=", MarketInfo(_Symbol, MODE_BID),
" | p/o=", OrderOpenPrice(), " | s/l=", OrderStopLoss(),
" | d=", _TrailingStopLevel, " | profitpoint=", profitpoint);
if(!OrderModify(OrderTicket(), OrderOpenPrice(), ND(bid - (_TrailingStopLevel) * _Point),
OrderTakeProfit(), 0, CLR_NONE))
{
Print("v128-2 v4 >", _Symbol, " | ", _Zeitrahmen,
" -> BUY > ticket=", OrderTicket(), " > Error (trailing stop) #", GetLastError());
}
}
}
//
sonst if(OrderType() == OP_SELL)
{
if(_IsTrailingStopProfit) fromprice = OrderOpenPrice() - from * _Point;
sonst fromprice = OrderStopLoss();
//
fragen = MarketInfo(_Symbol, MODE_ASK);
profitpoint = (ND(fromprice) - ask) / _Point;
//
if( profitpoint >= _TrailingStopLevel &&
ask < (OrderStopLoss() - (_TrailingStopLevel + _TrailingStopStep) * _Point) )
{
Print("v128-2 v4 >", _Symbol, " | ", _Zeitrahmen,
" -> Ask=", MarketInfo(_Symbol, MODE_ASK),
" | p/o=", OrderOpenPrice(), " | s/l=", OrderStopLoss(),
" | d=", _TrailingStopLevel, " | profitpoint=", profitpoint);
if(!OrderModify(OrderTicket(), OrderOpenPrice(), ND(ask + (_TrailingStopLevel) * _Point),
OrderTakeProfit(), 0, CLR_NONE))
{
Print("v128-2 v4 >", _Symbol, " | ", _Zeitrahmen,
" -> SELL > ticket=", OrderTicket(), " > Error (trailing stop) #", GetLastError());
}
}
}
}
}
}


//=++========================================= = ================++=
// Finden des lokalen Bodens. Gibt den Preis zurück
double FindPriceMinMax(bool isUp)
{
Int-Verschiebung = 1;
doppelter Preis = 0, p0,p1,p2;
solange (Preis == 0)
{
p0 = iCustom(_Symbol, _Timeframe, "ZigZag", _ZZ_ExtDepth, _ZZ_ExtDeviation, _ZZ_ExtBackstep, 0, shift);
p1 = iCustom(_Symbol, _Timeframe, "ZigZag", _ZZ_ExtDepth, _ZZ_ExtDeviation, _ZZ_ExtBackstep, 1, shift);
p2 = iCustom(_Symbol, _Timeframe, "ZigZag", _ZZ_ExtDepth, _ZZ_ExtDeviation, _ZZ_ExtBackstep, 2, shift);
//Print("v128-2 >", _Symbol, " | ", _Zeitrahmen,
// " > sichten=", verschieben, " | p0=", p0, " | p1=", p1, " | p2=", p2);
wenn (istOben)
{
if(p0 !=0 && p0 == p1) // Vertex gefunden
Preis = p0;
}
anders
{
if(p0 != 0 && p0 == p2) // Boden gefunden
Preis = p0;
}
Umschalt++;
}
//Print("v128-2 >", _Symbol, " | ", _Zeitrahmen,
// " -> return(price)=", price);
Rückgabe (Preis);
}


//============================================ = ====================
// Variable aus Datei lesen.
// Wenn die Datei nicht existiert, erstelle eine Datei und schreibe die Variable in die Datei
double _FileReadWriteDouble(String Dateiname, Double-Wert)
{
int h1 = FileOpen(Dateiname, FILE_BIN);
wenn (h1 > 0)
{
Wert = FileReadDouble(h1, DOUBLE_VALUE);
DateiSchließen(h1);
}
anders
{
h1 = FileOpen(Dateiname, FILE_BIN|FILE_WRITE);
FileWriteDouble(h1, Wert, DOUBLE_VALUE);
DateiSchließen(h1);
}
Rückgabewert);
}


//============================================ = ====================
// Variable in Datei schreiben
void _FileWriteDouble(String Dateiname, doppelter Wert)
{
int h1 = FileOpen(Dateiname, FILE_BIN|FILE_WRITE);
FileWriteDouble(h1, Wert, DOUBLE_VALUE);
DateiSchließen(h1);

}

 
Vitalie Postolache:

In dem Code, den Sie oben gezeigt haben, bezieht sich die Referenz auf die aktuelle TF, worüber reden wir also? Wenn Sie sich auf M5 von W1 aus beziehen, dann schreiben Sie das so.

Wenn Sie mit dem aktuellen Zeitrahmen arbeiten, dann ist der Schlusskurs schwimmend auf Null bar, und auf den Rest - nur ein Schlusskurs, nicht viele, wie Sie ein Histogramm auf einen Wert zu bauen, verstehe ich nicht.

Wenn Sie ein Bild zeichnen möchten, verwenden Sie die Symbolschaltflächen am oberen Rand des Bearbeitungsfeldes, dort gibt es viele nützliche Schaltflächen, die Sie lernen sollten.

Ich möchte wissen, wie ich die Höchst- und Tiefstwerte des Indikators im aktuellen Zeitrahmen während des aktuellen Zeitrahmens ermitteln kann,

Wenn Sie denken, ich sei faul und wolle nicht nach Bildern suchen, nein. Aber ich kann es trotzdem nicht tun. Ich klicke mit der rechten Maustaste auf den Chart im Terminal (Insta) - Als Bild speichern - Aktiver Chart so wie er ist - übertragen auf MKL5 (dort wird das gleiche Terminalbild angezeigt) - untere Zeile bbCode (ich markiere und kopiere den Code), dann füge ich diesen Code in die Nachricht ein, nachdem ich die Nachricht gesendet habe, sollte ein Bild in der Nachricht sein(dieses Forum hat keine, sondern zeigt nur den Text des Codes an), ich habe versucht, die Schaltfläche "Bilder" (Strg+Alt+l) zu verwenden, um die Datei auszuwählen, und der heruntergeladene Code kann nicht in diese Zeile eingefügt werden, ohne Screenshots werden Sie nicht verstehen.


 
vitek2010:

Ich habe gefragt, wie man die Höchst- und Tiefstwerte des Indikators auf dem aktuellen Zeitrahmen während des aktuellen Zeitrahmens erhält, ich habe Screenshots als Beispiel gegeben,

Wenn Sie denken, ich sei faul und wolle nicht nach Bildern suchen, nein. Aber ich kann es trotzdem nicht tun. Ich klicke mit der rechten Maustaste auf den Chart im Terminal (Insta) - Als Bild speichern - Aktiver Chart so wie er ist - übertragen auf MKL5 (dort wird das gleiche Terminalbild angezeigt) - untere Zeile bbCode (ich markiere und kopiere den Code), dann füge ich diesen Code in die Nachricht ein, nachdem ich die Nachricht gesendet habe, sollte ein Bild in der Nachricht sein(dieses Forum hat es nicht und zeigt nur den Code-Text an), ich habe versucht, die Schaltfläche "Bilder" (Strg+Alt+l) zu verwenden, um die Datei auszuwählen, und der heruntergeladene Code kann nicht in dieses Diagramm eingefügt werden, aber ohne Screenshots werden Sie nicht verstehen.

Anstelle des Dateinamens auf dem lokalen Computer können Sie einen Link einfügen, genau in der gleichen Zeile, in der sie den Dateinamen schreiben, alles funktioniert. Wie diese

Es ist auch möglich, einen Link in die Nachricht einzufügen, aber ohne Tags, in diesem Forum funktionieren Tags nicht. Zum Beispiel so.

Um Preise von einer kleineren TF zu erhalten, gibt es CopyRates und ähnliche Funktionen für jeden Preis einzeln.

Sie wird in das Array kopiert, dann wird in der Schleife die Zeit mit der Zeit einer Kerze einer höheren TF verglichen, wenn die niedrigere Kerze passt, dann wird der Preis im Indikator gezählt.
 
Gibt es eine Möglichkeit, die Indikatorzeichnungen im Tester zu sehen, denn die Grafik zeigt etwas, das ich übersehen habe
Dateien:
Tester11.gif  18 kb
 
trader781:
Können Sie die Indikatorzeichnungen im Tester sehen, denn nach dem Diagramm zu urteilen, habe ich dort etwas übersehen?

Im Testgerät gibt es eine Schaltfläche"Diagramm öffnen". Ich frage mich, wofür es ist?

Oder das Kontrollkästchen "Visualisierung".

 
Vitalie Postolache:

Im Testgerät gibt es eine Schaltfläche"Diagramm öffnen". Ich frage mich, wofür es ist?

Oder das Kontrollkästchen "Visualisierung".

Ich meine, während das Diagramm scrollt, sind dort keine Indizes zu sehen.
 
trader781:
Ich meine, während das Diagramm durchläuft, sind dort keine Truthähne zu sehen.
Die gab es nie. Man legt sie mit der Hand, wenn man sie braucht. Der Test wird pausiert, der Indikator in das Diagramm eingefügt, und dann dreht man ihn.