Bitte helfen Sie, EAs kostenlos zu schreiben. 5 verschiedene Ideen. - Seite 15

 

Das war's. Verstehe. Ich "versuche" zu helfen. Ich denke, es ist an der Zeit, weitere Ideen mitzuteilen.

 
GeneratorID:

Das war's. Verstehe. Ich "versuche" zu helfen. Ich denke, es ist an der Zeit, weitere Ideen mitzuteilen.


Wer würde sich für das "alte Fahrrad" interessieren? Sie haben immer noch nicht verstanden, dass das, was Sie zu erforschen versuchen, schon lange im Forum zu finden ist und dass es freie Implementierungen in der Codebasis gibt - schauen Sie nach und spielen Sie herum. Haben Sie Ihre eigenen Ideen? Ansonsten gibt es nichts zu diskutieren.
 

Bitte helfen Sie mir, die maximale Anzahl offener Bestellungen zum Berater hinzuzufügen!

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

//| v128-2.mq4 |

//| Copyright © 2011, Andrej N. Bolkonsky |

//| 21.03.2011 |

//| E-Mail: abolk@yandex.ru | Skype: abolk1 |

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

#property copyright "Copyright © 2011, Andrey N. Bolkonsky"

#property link "abolk@yandex.ru"


//

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 Kursdiagramm

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());

}

}

}


}


// Anzahl der Bestellungen

}




//=++========================================= = ================++=

// 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() == Magie) )

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);

}

Grund der Beschwerde: