Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   In TPSL-insert (http://www.expert-advisor.com/forum/showthread.php?t=3738)

josef123456 01.07.14 17:20

In TPSL-insert
 
hallo

unten ist der code von TPSL-insert.mq4. Er macht was er soll recht gut und setzt TP und SL sofort nach einer order.

mein Anliegen: kann mir da bitte jemand eine Magicnummer einbauen, damit ich den EA im selben Währungspaar mit verschiedenen Settings betreiben kann?
lg Joe

hier ist der code:

//+------------------------------------------------------------------+
//| TPSL-Insert.mq4 |
//| |
//| |
//+------------------------------------------------------------------+
#property copyright ""
#property link ""

//---- input parameters
extern double TakeProfitPips=100;
extern double StopLossPips=150;
int Faktor, Digt, cnt;
double TPp, SLp;

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init(){}

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

//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
if(Close[0]>10) {Faktor=1000; Digt=3;} else
if(Close[0]<10) {Faktor=100000; Digt=5;}

if(OrdersTotal()!=0)
{
for(cnt=0; cnt<OrdersTotal(); cnt++)
{
OrderSelect(cnt,SELECT_BY_POS);


//--------------Take Profit--------------------------------

if(OrderTakeProfit()==0 && TakeProfitPips !=0)
{
if(OrderType()==OP_BUY && OrderSymbol()==Symbol())
{TPp = OrderOpenPrice()+TakeProfitPips/Faktor;}
if(OrderType()==OP_SELL && OrderSymbol()==Symbol())
{TPp = OrderOpenPrice()-TakeProfitPips/Faktor;}
} else TPp = OrderTakeProfit();

//--------------Stop Loss--------------------------------

if(OrderStopLoss()==0 && StopLossPips !=0)
{
if(OrderType()==OP_BUY && OrderSymbol()==Symbol())
{SLp = OrderOpenPrice()-StopLossPips/Faktor;}
if(OrderType()==OP_SELL && OrderSymbol()==Symbol())
{SLp = OrderOpenPrice()+StopLossPips/Faktor;}
} else SLp = OrderStopLoss();

//---------------Modify Order--------------------------
if (OrderType()==OP_BUY || OrderType()==OP_SELL)
OrderModify(OrderTicket(),OrderOpenPrice(),SLp,TPp ,0);
//-----------------------------------------------------

} // for cnt
}//if OrdersTotal
return(0);
}// Start()
//+------------------------------------------------------------------+

traderdoc 01.07.14 18:01

Zitat:

Zitat von josef123456 (Beitrag 26634)
hallo

unten ist der code von TPSL-insert.mq4. Er macht was er soll recht gut und setzt TP und SL sofort nach einer order.

mein Anliegen: kann mir da bitte jemand eine Magicnummer einbauen, damit ich den EA im selben Währungspaar mit verschiedenen Settings betreiben kann?
lg Joe

hier ist der code:

//+------------------------------------------------------------------+
//| TPSL-Insert.mq4 |
//| |
//| |
//+------------------------------------------------------------------+
#property copyright ""
#property link ""

//---- input parameters
extern double TakeProfitPips=100;
extern double StopLossPips=150;
extern int Magicnummer = 100;
int Faktor, Digt, cnt;
double TPp, SLp;

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init(){}

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

//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
if(Close[0]>10) {Faktor=1000; Digt=3;} else
if(Close[0]<10) {Faktor=100000; Digt=5;}

if(OrdersTotal()!=0)
{
for(cnt=0; cnt<OrdersTotal(); cnt++)
{
OrderSelect(cnt,SELECT_BY_POS);
if (OrderMagicNumber() != Magicnummer) continue;


//--------------Take Profit--------------------------------

if(OrderTakeProfit()==0 && TakeProfitPips !=0)
{
if(OrderType()==OP_BUY && OrderSymbol()==Symbol())
{TPp = OrderOpenPrice()+TakeProfitPips/Faktor;}
if(OrderType()==OP_SELL && OrderSymbol()==Symbol())
{TPp = OrderOpenPrice()-TakeProfitPips/Faktor;}
} else TPp = OrderTakeProfit();

//--------------Stop Loss--------------------------------

if(OrderStopLoss()==0 && StopLossPips !=0)
{
if(OrderType()==OP_BUY && OrderSymbol()==Symbol())
{SLp = OrderOpenPrice()-StopLossPips/Faktor;}
if(OrderType()==OP_SELL && OrderSymbol()==Symbol())
{SLp = OrderOpenPrice()+StopLossPips/Faktor;}
} else SLp = OrderStopLoss();

//---------------Modify Order--------------------------
if (OrderType()==OP_BUY || OrderType()==OP_SELL)
OrderModify(OrderTicket(),OrderOpenPrice(),SLp,TPp ,0);
//-----------------------------------------------------

} // for cnt
}//if OrdersTotal
return(0);
}// Start()
//+------------------------------------------------------------------+


Viel Erfolg!

traderdoc

josef123456 01.07.14 18:36

Zitat:

Zitat von traderdoc (Beitrag 26635)
Viel Erfolg!

traderdoc

danke. ganz lieb.
sind noch weitere verwertbare ansätze im raum?
lg joe

traderdoc 01.07.14 20:21

Zitat:

Zitat von josef123456 (Beitrag 26636)
danke. ganz lieb.
sind noch weitere verwertbare ansätze im raum?
lg joe

Was sollte denn noch anders werden?
Weniger als zwei zusätzliche Programmzeilen werden nur noch von 1 getoppt.
Das geht aber nicht, weil Du erstens eine Magicnummer eingeben mußt und zweitens diese in der zweiten Zeile abgefragt wird.

traderdoc

josef123456 01.07.14 20:30

Zitat:

Zitat von traderdoc (Beitrag 26637)
Was sollte denn noch anders werden?
Weniger als zwei zusätzliche Programmzeilen werden nur noch von 1 getoppt.
Das geht aber nicht, weil Du erstens eine Magicnummer eingeben mußt und zweitens diese in der zweiten Zeile abgefragt wird.

traderdoc

du traderdoc jetzt muss ich mich aber ziemlich entschuldigen. ich habe gar nicht gecheckt, dass du den code verändert hast! ich dachte, mein anliegen ist so vermessen, dass du mich vergeigen willst...

DANKE zuerst mal fürs coden überhaupt.
ich werds jetzt testen.
lg joe

josef123456 01.07.14 20:48

Zitat:

Zitat von traderdoc (Beitrag 26637)
Was sollte denn noch anders werden?
Weniger als zwei zusätzliche Programmzeilen werden nur noch von 1 getoppt.
Das geht aber nicht, weil Du erstens eine Magicnummer eingeben mußt und zweitens diese in der zweiten Zeile abgefragt wird.

traderdoc

also ich habs jetzt getestet, eine magicnummer kann jetzt eingegeben werden.
es werden aber kein TP und SL gesetzt.
lg joe

traderdoc 01.07.14 21:00

Zitat:

Zitat von josef123456 (Beitrag 26639)
also ich habs jetzt getestet, eine magicnummer kann jetzt eingegeben werden.
es werden aber kein TP und SL gesetzt.
lg joe

Na ja, der TP und SL kann auch erst gesetzt werden, wenn überhaupt eine Order offen ist.
Mit diesem Code wird bisher auch keine Order geöffnet, sondern nur der TP und SL berechnet und mittels OrderModify() dann eine bestehende Order bzgl. TP und SL geändert.

D.h. das fehlt der Teil der initialen Orderöffnung.

traderdoc

josef123456 01.07.14 21:40

Zitat:

Zitat von traderdoc (Beitrag 26640)
Na ja, der TP und SL kann auch erst gesetzt werden, wenn überhaupt eine Order offen ist.
Mit diesem Code wird bisher auch keine Order geöffnet, sondern nur der TP und SL berechnet und mittels OrderModify() dann eine bestehende Order bzgl. TP und SL geändert.

D.h. das fehlt der Teil der initialen Orderöffnung.

traderdoc

also, bisher funktioniert TPSL-insert so:
zuerst wirde der EA wie gewohnt über den Chart gezogen.
dann wird über den one-click-trading-button wird eine beliebige order eröffnet und beim nächsten tick werden TP und SL gesetzt.

so habe ich mir das nun auch hier vorgestellt, nur eben mit Magicnummer. Das funktioniert aber noch nicht. Nach der Ordereröffnung wird kein TPSL gesetzt.
wie könnte man dies nun realisieren?
lg joe

traderdoc 01.07.14 22:11

Na ja, das geht dann nicht so einfach, weil die MagigNumber per EA!!! beim Orderöffnen mittels OrderSend() gesetzt werden müßte.
Wenn Du jetzt händisch!!! über das One-Click-Trading gehst, kannst Du keine MagicNumber an die Order koppeln. Es gibt einen kleinen Umweg über die Zeile "Kommentar:" im Fenster des Auftrages, wenn Du über das One-Click-Trading gehst.
In diese Kommentarzeile mußt Du dann die Magicnummer schreiben, aber auch in die Variable Magicnummer am Codeanfang.
Der EA wird dann den Kommentar der Order auslesen und mit der im Code oben angegebenen Magicnummer vergleichen und bei Identität den TP und SL setzen.

//+------------------------------------------------------------------+
//| TPSL-Insert.mq4 |
//| |
//| |
//+------------------------------------------------------------------+
#property copyright ""
#property link ""

//---- input parameters
extern double TakeProfitPips=100;
extern double StopLossPips=150;
extern int Magicnummer = 100;
int Faktor, Digt, cnt;
double TPp, SLp;

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init(){}

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

//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
if(Close[0]>10) {Faktor=1000; Digt=3;} else
if(Close[0]<10) {Faktor=100000; Digt=5;}

if(OrdersTotal()!=0)
{
for(cnt=0; cnt<OrdersTotal(); cnt++)
{
OrderSelect(cnt,SELECT_BY_POS);
if (StringToInteger(OrderComment()) != Magicnummer) continue;


//--------------Take Profit--------------------------------

if(OrderTakeProfit()==0 && TakeProfitPips !=0)
{
if(OrderType()==OP_BUY && OrderSymbol()==Symbol())
{TPp = OrderOpenPrice()+TakeProfitPips/Faktor;}
if(OrderType()==OP_SELL && OrderSymbol()==Symbol())
{TPp = OrderOpenPrice()-TakeProfitPips/Faktor;}
} else TPp = OrderTakeProfit();

//--------------Stop Loss--------------------------------

if(OrderStopLoss()==0 && StopLossPips !=0)
{
if(OrderType()==OP_BUY && OrderSymbol()==Symbol())
{SLp = OrderOpenPrice()-StopLossPips/Faktor;}
if(OrderType()==OP_SELL && OrderSymbol()==Symbol())
{SLp = OrderOpenPrice()+StopLossPips/Faktor;}
} else SLp = OrderStopLoss();

//---------------Modify Order--------------------------
if (OrderType()==OP_BUY || OrderType()==OP_SELL)
OrderModify(OrderTicket(),OrderOpenPrice(),SLp,TPp ,0);
//-----------------------------------------------------

} // for cnt
}//if OrdersTotal
return(0);
}// Start()
//+------------------------------------------------------------------+

Viel Erfolg!

traderdoc

fxdaytrader 01.07.14 22:19

Zitat:

Zitat von josef123456 (Beitrag 26641)
also, bisher funktioniert TPSL-insert so:
zuerst wirde der EA wie gewohnt über den Chart gezogen.
dann wird über den one-click-trading-button wird eine beliebige order eröffnet und beim nächsten tick werden TP und SL gesetzt.

Es sollte klar sein daß die im EA eingegebene magicnumber mit derjenigen magicnumber der geöffneten order übereinstimmen muß.
Wenn Du also manuell eine order aufgibst, dann muß im EA auch eine 0 eingetragen werden. Sonst läuft es nicht.

Womit wir bei einer Sache wären die mich zur Weissglut bringen kann: Jemand fragt nach etwas, jemand anderes stellt das (diese Modifikation) kostenlos in den Raum, und zur Belohnung kommt ein "das funzt aber nicht". Wobei die Schuld nicht beim Programmierer liegt, sondern bei dem Idioten vor dem Bildschirm.

Wenn Ihr Programme nutzt (mt4 ist ein Programm) dann lest die schei** Gebrauchsanweisung solange bis Ihr sie versteht und wißt was Ihr da treibt.
Ich persönlich kann Deppen nicht ausstehen (ausser im Vollsuff, dann bin mit Glück ich auf demselben Level wie die nüchtern) und versuche mich von Ihnen fernzuhalten.


Alle Zeitangaben in WEZ +2. Es ist jetzt 06:26 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum