[Archiv!] Einen Ratgeber kostenlos schreiben - Seite 83

 
int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)
Die Hauptfunktion, mit der eine Position eröffnet oder ein schwebender Auftrag erteilt wird.
Gibt die Nummer des Tickets zurück, das dem Auftrag vom Handelsserver zugewiesen wurde, oder -1, wenn dies fehlgeschlagen ist. Um zusätzliche Fehlerinformationen zu erhalten, muss man die Funktion GetLastError() aufrufen.
Anmerkungen:
Bei der Eröffnung eines Marktauftrags (OP_SELL oder OP_BUY) können nur die letzten Preise von Bid (für Verkauf) oder Ask (für Kauf) als offener Preis verwendet werden. Wird die Operation mit einem anderen Wertpapier als dem aktuellen durchgeführt, muss die Funktion MarketInfo() mit dem Parameter MODE_BID oder MODE_ASK verwendet werden, um die neuesten Kurse für dieses Wertpapier zu erhalten. Berechnete oder nicht normalisierte Preise können nicht angewendet werden. Wenn der angeforderte offene Preis nicht im Preis-Thread vorhanden ist oder nicht entsprechend der Anzahl der Nachkommastellen normalisiert wurde, wird der Fehler 129 (ERR_INVALID_PRICE) erzeugt. Wenn der angeforderte offene Preis völlig veraltet ist, wird der Fehler 138 (ERR_REQUOTE) unabhängig vom Slippage-Parameter erzeugt. Wenn der angefragte Preis veraltet, aber im Thread vorhanden ist, wird die Position zum aktuellen Preis eröffnet, und zwar nur, wenn der aktuelle Preis innerhalb der Spanne vonPreis+Slippage liegt.

StopLoss- und TakeProfit-Niveaus dürfen nicht zu nahe am Markt liegen. Der Mindestabstand der Stopp-Levels in Punkten kann mit der Funktion MarketInfo() mit dem Parameter MODE_STOPLEVEL ermittelt werden. Bei fehlerhaften oder nicht normierten Haltestellenwerten wird der Fehler 130 (ERR_INVALID_STOPS) erzeugt.

Bei der Platzierung eines schwebenden Auftrags darf der offene Preis nicht zu nahe am Markt liegen. Der minimale Abstand des schwebenden Kurses vom aktuellen Markt in Punkten kann mit der Funktion MarketInfo() mit dem Parameter MODE_STOPLEVEL ermittelt werden. Im Falle eines falschen Eröffnungskurses eines schwebenden Auftrags wird der Fehler 130 (ERR_INVALID_STOPS) erzeugt.

Die Anwendung der Ablaufzeit für ausstehende Aufträge kann bei einigen Handelsservern deaktiviert werden. Wenn in diesem Fall ein Wert ungleich Null imAblaufparameter angegeben wird, wird der Fehler 147 (ERR_TRADE_EXPIRATION_DENIED) erzeugt.

Auf einigen Handelsservern kann die Gesamtzahl der offenen und schwebenden Aufträge begrenzt sein. Wenn dieses Limit überschritten wurde, wird keine neue Position eröffnet (oder keine Pending Order platziert) und der Trade Server gibt den Fehler 148 (ERR_TRADE_TOO_MANY_ORDERS) zurück.
Parameter:
Symbol - Symbol für den Handel.
cmd - Betriebsart. Es kann eine der Handelsoperationen sein, die in der Aufzählung enthalten sind.
Band - Anzahl der Lose.
Preis - Bevorzugter Preis für den Handel.
Schlupf - Maximale Kursabweichung für Kauf- oder Verkaufsaufträge.
Stoploss - Stop-Loss-Niveau.
Gewinnmitnahme - Gewinnmitnahme-Niveau.
Kommentar - Kommentartext bestellen. Der letzte Teil des Kommentars kann vom Server geändert werden.
Magie - Magische Zahl bestellen. Kann als benutzerdefinierter Bezeichner verwendet werden.
Ablauf - Verfallszeit der Bestellung (nur für schwebende Bestellungen).
Pfeil_Farbe - Farbe des Eröffnungspfeils im Diagramm. Wenn der Parameter fehlt oder den Wert CLR_NONE hat, wird der Öffnungspfeil nicht auf dem Diagramm gezeichnet.
 
#property link "dwgrell@gmail.com"

//--- Eingabeparameter
extern int period=16;
extern int porog=50;

extern double lot=1;
extern inttern k=5000;

extern bool pl=true;
//+------------------------------------------------------------------+
//| Experten-Initialisierungsfunktion |
//+------------------------------------------------------------------+
int init()
{
//----

//----
zurück(0);
}
//+------------------------------------------------------------------+
//| Experten-Deinitialisierungsfunktion |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
zurück(0);
}
//+------------------------------------------------------------------+
//| Expertenstartfunktion |
//+------------------------------------------------------------------+
int start()
{
double bs=NormalizeDouble(iCustom(Symbol(),0, "Aver",period,0,0),Digits);
double ss=NormalizeDouble(iCustom(Symbol(),0, "Aver",period,1,0),Digits);
double tpb=NormalizeDouble(bs+(bs-ss),Digits);
double tps=NormalizeDouble(ss-(bs-ss),Digits);
if(pl==true)double lots=MathMin(AccountFreeMargin()/k,5);
if(pl==false)lots=lot;
if(AufträgeSumme()==0)
{
OrderSend(Symbol(),OP_BUYSTOP,lots,bs,3,ss,tpb,"",1394,0,Red);//Buy Limit öffnen.
OrderSend(Symbol(),OP_SELLSTOP,lots,ss,3,bs,tps,"",1394,0,Blue);//Verkaufsstop öffnen.
}
if(AufträgeSumme()==2)
{
OrderSelect(0,SELECT_BY_POS,MODE_TRADES);//Wählen Sie den nächstgelegenen Auftrag.
if(OrderType()==OP_BUYSTOP &&bs<OrderOpenPrice())OrderModify(OrderTicket(),bs,ss,tpb,0,Red);
if(OrderType()==OP_SELLSTOP&&&ss>OrderOpenPrice())OrderModify(OrderTicket(),ss,bs,tps,0,Blue);
if(OrderType()==OP_BUY &&ss>OrderStopLoss())OrderModify(OrderTicket(),OrderOpenPrice(),ss,OrderTakeProfit(),0,Red);
if(OrderType()==OP_SELL&&bs<OrderStopLoss())OrderModify(OrderTicket(),OrderOpenPrice(),bs,OrderTakeProfit(),0,Red);
OrderSelect(1,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUYSTOP &&bs<OrderOpenPrice())OrderModify(OrderTicket(),bs,ss,tpb,0,Red);
if(OrderType()==OP_SELLSTOP&&&ss>OrderOpenPrice())OrderModify(OrderTicket(),ss,bs,tps,0,Blue);
if(OrderType()==OP_BUY &&ss>OrderStopLoss())OrderModify(OrderTicket(),OrderOpenPrice(),ss,OrderTakeProfit(),0,Red);
if(OrderType()==OP_SELL&&bs<OrderStopLoss())OrderModify(OrderTicket(),OrderOpenPrice(),bs,OrderTakeProfit(),0,Red);
}
if(AufträgeSumme()==1)
{
OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
if(Auftragsart()==OP_BUY) {OrderModify(OrderTicket(),OrderOpenPrice(),ss,OrderTakeProfit(),0,Red);
OrderSend(Symbol(),OP_SELLSTOP,lots,ss,3,bs,tps,"",1394,0,Blue);}
if(OrderType()==OP_SELL) {OrderModify(OrderTicket(),OrderOpenPrice(),bs,OrderTakeProfit(),0,Red);
OrderSend(Symbol(),OP_BUYSTOP,lots,bs,3,ss,tpb,",1394,0,Red);}
if(OrderType()==OP_BUYSTOP) {OrderModify(OrderTicket(),bs,ss,tpb,0,Red);
OrderSend(Symbol(),OP_SELLSTOP,lots,ss,3,bs,tps,"",1394,0,Blue);}
if(OrderType()==OP_SELLSTOP){OrderModify(OrderTicket(),ss,bs,tps,0,Blue);
OrderSend(Symbol(),OP_BUYSTOP,lots,bs,3,ss,tpb,",1394,0,Red);}
}

zurück(0);
}
//+------------------------------------------------------------------+
 
#property link "dwgrell@gmail.com"

//--- input parameters
extern int period=16;
extern int porog=50;

extern double lot=1;
extern int k=5000;

extern bool pl=true;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
double bs=NormalizeDouble(iCustom(Symbol(),0,"Aver",period,0,0),Digits);
double ss=NormalizeDouble(iCustom(Symbol(),0,"Aver",period,1,0),Digits);
double tpb=NormalizeDouble(bs+(bs-ss),Digits);
double tps=NormalizeDouble(ss-(bs-ss),Digits);
if(pl==true)double lots=MathMin(AccountFreeMargin()/k,5);
if(pl==false)lots=lot;
if(OrdersTotal()==0)
{
OrderSend(Symbol(),OP_BUYSTOP,lots,bs,3,0,0,"",1394,0,Red);//Открываем отложник на покупку.
OrderSend(Symbol(),OP_SELLSTOP,lots,ss,3,0,0,"",1394,0,Blue);//Открываем отложник на продажу.
}
if(OrdersTotal()==2)
{
OrderSelect(0,SELECT_BY_POS,MODE_TRADES);//Выбираем ближайший ордер.
if(OrderType()==OP_BUYSTOP &&bs<OrderOpenPrice())OrderModify(OrderTicket(),bs,0,0,0,Red);
if(OrderType()==OP_SELLSTOP&&ss>OrderOpenPrice())OrderModify(OrderTicket(),ss,0,0,0,Blue);
//if(OrderType()==OP_BUY &&ss>OrderStopLoss())OrderModify(OrderTicket(),OrderOpenPrice(),ss,OrderTakeProfit(),0,Red);
//if(OrderType()==OP_SELL&&bs<OrderStopLoss())OrderModify(OrderTicket(),OrderOpenPrice(),bs,OrderTakeProfit(),0,Red);
OrderSelect(1,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUYSTOP &&bs<OrderOpenPrice())OrderModify(OrderTicket(),bs,0,0,0,Red);
if(OrderType()==OP_SELLSTOP&&ss>OrderOpenPrice())OrderModify(OrderTicket(),ss,0,0,0,Blue);
//if(OrderType()==OP_BUY &&ss>OrderStopLoss())OrderModify(OrderTicket(),OrderOpenPrice(),ss,OrderTakeProfit(),0,Red);
//if(OrderType()==OP_SELL&&bs<OrderStopLoss())OrderModify(OrderTicket(),OrderOpenPrice(),bs,OrderTakeProfit(),0,Red);
}
if(OrdersTotal()==1)
{
OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUY) {/*OrderModify(OrderTicket(),OrderOpenPrice(),ss,OrderTakeProfit(),0,Red);*/
OrderSend(Symbol(),OP_SELLSTOP,lots,ss,3,0,0,"",1394,0,Blue);}
if(OrderType()==OP_SELL) {/*OrderModify(OrderTicket(),OrderOpenPrice(),bs,OrderTakeProfit(),0,Red);*/
OrderSend(Symbol(),OP_BUYSTOP,lots,bs,3,0,0,"",1394,0,Red);}
if(OrderType()==OP_BUYSTOP) {/*OrderModify(OrderTicket(),bs,ss,tpb,0,Red);*/
OrderSend(Symbol(),OP_SELLSTOP,lots,ss,3,0,0,"",1394,0,Blue);}
if(OrderType()==OP_SELLSTOP){/*OrderModify(OrderTicket(),ss,bs,tps,0,Blue);*/
OrderSend(Symbol(),OP_BUYSTOP,lots,bs,3,0,0,"",1394,0,Red);}
}

return(0);
}
//+------------------------------------------------------------------+
 
Konto: 154603Name: DmitrijWährung: USD2011 Juli 12, 14:23
Abgeschlossene Transaktionen:
TicketOffene ZeitTypGrößeArtikelPreisS / LT / PZeit schließenPreisKommissionSteuernTauschen SieGewinn
37055732011.07.12 13:57kaufen2.16eurusd1.39821.39731.40652011.07.12 14:131.39730.000.000.00-194.40
37053282011.07.12 13:19kaufen2.01eurusd1.39241.38991.39482011.07.12 13:491.39480.000.000.00482.40
37053562011.07.12 13:14verkaufen2.17eurusd1.39001.39241.38762011.07.12 13:191.39240.000.000.00-520.80
37052852011.07.12 13:05verkaufen2.17eurusd1.39141.39241.39042011.07.12 13:111.39040.000.000.00217.00
37052782011.07.12 13:04kaufen2.17eurusd1.39241.39141.39342011.07.12 13:051.39140.000.000.00-217.00
37048122011.07.12 11:32kaufen2.40eurusd1.39591.39141.40202011.07.12 13:011.39140.000.000.00-1 080.00
37040302011.07.12 13:01verkaufen1.88eurusd1.39141.39171.39112011.07.12 13:011.39170.000.000.00-56.40
37041582011.07.12 10:22kaufen2.13eurusd1.38961.38981.39582011.07.12 11:301.39580.000.000.001 320.60
37040632011.07.12 10:12kaufen2.02eurusd1.38611.38341.38882011.07.12 10:211.38880.000.000.00545.40
37040202011.07.12 10:05kaufen1.92eurusd1.38481.38341.38592011.07.12 10:121.38590.000.000.00211.20
37040012011.07.12 10:04verkaufen1.95eurusd1.38371.38481.38312011.07.12 10:051.38480.000.000.00-214.50
37035052011.07.12 10:01kaufen1.82eurusd1.38431.38371.38492011.07.12 10:041.38370.000.000.00-109.20
37039202011.07.12 09:52verkaufen2.04eurusd1.38451.38431.37552011.07.12 10:011.38430.000.000.0040.80
37036312011.07.12 09:12verkaufen1.88eurusd1.38921.39351.38492011.07.12 09:501.38490.000.000.00808.40
37035332011.07.12 09:03verkaufen1.80eurusd1.39151.39351.38952011.07.12 09:101.38950.000.000.00360.00
37035062011.07.12 09:02verkaufen1.82eurusd1.39271.39301.39242011.07.12 09:021.39300.000.000.00-54.60
 
Ich empfehle es nicht wirklich.
 
grell Ich erhalte keine Verluststopps
 
Stop-Loss bei Candlestick-Tief
 
oder maximal, je nachdem, welcher Auftrag
 
Versuchen Sie, in den EA-Code zu schauen, und Sie werden verstehen, warum es kastriert wurde. es ist einfach da, weil ich es für einen Tester geschrieben habe. Aber merkwürdigerweise funktioniert es doch.
 
Um ehrlich zu sein, verstehe ich die MQL-Programmierung überhaupt nicht.