Liste der Anhänge anzeigen (Anzahl: 1)
Wie jetzt "Alles klar" ? :confused:
Irgendwie ist Einiges gar nicht klar. :rolleyes:
Im Anhang die neueste Version. Hoffe mal, die macht einigermaßen was sie soll. Oder zumindest besser als die Vers. davor. :rolleyes:
Hab nichts gegen Tipps zur Verbesserung / Optimierung. ;)
Code:
/*=============================================================================================================
// N O T I Z E N U N D I N F O S
//=============================================================================================================
Anscheinend muss DONO mehr als doppelt so groß wie Spread sein,
weil sonst nicht alle Spread-Kosten wieder rein kommen?
//-------------------------------------------------------------------------------------------------------------
In dieser Vers. LoShAL_v5_PRINT.mq4 gibt es 3 OS.
//-------------------------------------------------------------------------------------------------------------
//=============================================================================================================
// P R O P E R T Y
//============================================================================================================*/
//#property strict
//#ps sorgt anscheinend dafür, dass Kommentare im Konfig-Fenster im MT4 sichtbar sind.
#property copyright"LoShAL_v5_PRINT.mq4"
#property copyright"daniel-rudloff@web.de"
//=============================================================================================================
// B E S C H R E I B U N G
//=============================================================================================================
extern string esTOY="true = on / yes";
extern string esFON="false = off / no";
//-----------------------------------------------------------------------------------------------------------*/
extern string esB01="Open 1.Sel & 1.Buy.";
extern string esB02="if last Sel >";
extern string esB03="( OrderOpenPrice()";
extern string esB04="+ Dist_ONO )";
extern string esB05="EA multi LotsBuy.";
extern string esB06="If 1.Sel <";
extern string esB07="( OrderOpenPrice()";
extern string esB08="- D_CAO )";
extern string esB09="EA close all Orders.";
extern string esB10="if last Buy <";
extern string esB11="( OrderOpenPrice()";
extern string esB12="- Dist_ONO )";
extern string esB13="EA multi LotsSel.";
extern string esB14="If 1.Buy >";
extern string esB15="( OrderOpenPrice()";
extern string esB16="+ D_CAO )";
extern string esB17="EA close all Orders.";
//=============================================================================================================
// E I N S T E L L U N G E N
//=============================================================================================================
extern string esMN="Magic Numbers";
extern int MN_FiSel=12;
extern int MN_FiBuy=34;
extern int MN_NeSel=56;
extern int MN_NeBuy=78;
//-----------------------------------------------------------------------------------------------------------*/
extern string esOOFT1="Open Orders";
extern string esOOFT2="from/till Hour";
extern string esOOFT3="(Server Time)";
extern int FromH=5;// Vor 5 Uhr starten scheint sich nicht zu lohnen.
extern int TillH=16;// Zum Testen bis einschließlich 16 Uhr öffnen.
//-----------------------------------------------------------------------------------------------------------*/
extern string esTF="TimeFrame";
input ENUM_TIMEFRAMES TF=1;// Zum Testen M1
//-----------------------------------------------------------------------------------------------------------*/
extern int Slippage=12345;
//-----------------------------------------------------------------------------------------------------------*/
extern int SL=225;// ?
//-----------------------------------------------------------------------------------------------------------*/
extern int TP=200;// ?
//-----------------------------------------------------------------------------------------------------------*/
extern string esIITCBSMS1="if IsTradeContexBusy()";
extern string esIITCBSMS2="sleep MS";
extern int slMS=40;// Zum Testen 40ms ?
//-----------------------------------------------------------------------------------------------------------*/
extern string esDOONO1="Dist to OrderOpenPrice()";
extern string esDOONO2="open next Order";
extern int D_ONO=34;// Zum Testen 34
//-----------------------------------------------------------------------------------------------------------*/
extern string esDCAO1="Dist to OrderOpenPrice()";
extern string esDCAO2="close all Orders";
extern int D_CAO=67;// Zum Testen 67
//-----------------------------------------------------------------------------------------------------------*/
extern string esL="Lots";
extern double Lots=0.01;
extern int Lots_Multi=3;// Zum Testen 3
//-----------------------------------------------------------------------------------------------------------*/
//=============================================================================================================
// G L O B A L E D E K L A R A T I O N E N
//=============================================================================================================
bool
fiLO,fiSH,neLO,neSH,OC_Sel,OC_Buy
;
//-----------------------------------------------------------------------------------------------------------*/
double
SL_Sel,SL_Buy,TP_Sel,TP_Buy,MSL,
DON_Sel,DON_Buy,DCAO_FiSel,DCAO_FiBuy,
Lots_Sel,Lots_Buy,
OL,L_LO,L_SH
;
//-----------------------------------------------------------------------------------------------------------*/
int
i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,// ?
TI_FiSel,TI_FiBuy,TI_NeSel,TI_NeBuy,
Opened_Sel,Opened_Buy,Need_Sel,Need_Buy
;
//=============================================================================================================
// I N I T
//=============================================================================================================
void OnInit(){ChartSetSymbolPeriod(0,NULL,TF);}
//=============================================================================================================
// E A F U N K T I O N E N S T A R T
//=============================================================================================================
void OnTick(){
//=============================================================================================================
// S T O P L O S S
//=============================================================================================================
//SL auf 0 stellen, wenn oben <1, um irgendwelche Missverständnisse zu vermeiden.
if(SL<1){
SL_Sel=0.0;
SL_Buy=0.0;}
if(SL>0){
SL_Sel=NormalizeDouble(Bid+SL*Point,Digits);
SL_Buy=NormalizeDouble(Ask-SL*Point,Digits);}
//=============================================================================================================
// T A K E P R O F I T
//=============================================================================================================
//TP auf 0 stellen, wenn oben <1, um irgendwelche Missverständnisse zu vermeiden.
if(TP<1){
TP_Sel=0.0;
TP_Buy=0.0;}
if(TP>0){
TP_Sel=NormalizeDouble(Bid-TP*Point,Digits);
TP_Buy=NormalizeDouble(Ask+TP*Point,Digits);}
//=============================================================================================================
// L O T S
//=============================================================================================================
double mL,oLmL,Mr,MmL;
mL = MarketInfo(Symbol(),MODE_MINLOT);
Mr = MarketInfo(Symbol(),MODE_MARGINREQUIRED);
//=============================================================================================================
// O R D E R S E A R C H 1 ( i )
//=============================================================================================================
fiLO=false;
fiSH=false;
neLO=false;
neSH=false;
for(i=OrdersTotal()-1;i>=0;i--){
if(OrderSelect(i,SELECT_BY_POS)){
if(OrderSymbol()==Symbol()){
if(OrderMagicNumber()==MN_FiBuy)fiLO=true;
if(OrderMagicNumber()==MN_FiSel)fiSH=true;
if(OrderMagicNumber()==MN_NeBuy)neLO=true;
if(OrderMagicNumber()==MN_NeSel)neSH=true;}}}
//=============================================================================================================
// O R D E R C H E C K 1
//=============================================================================================================
//Wenn nach OS1 gar keine Orders offen sind...
if(fiSH==false&&fiLO==false&&neSH==false&&neLO==false){
//=============================================================================================================
// ( O C 1 ) O P E N F I R S T S E L / O P E N F I R S T B U Y
//=============================================================================================================
//...und wenn zur Zeit Orders geöffnet werden dürfen, FirstSel und FirstBuy öffnen.
if(Hour()>=FromH&&Hour()<=TillH){
if(IsTradeAllowed())TI_FiSel=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL_Sel,TP_Sel,NULL,MN_FiSel,clrBlue);
if(IsTradeContextBusy())Sleep(slMS);
if(IsTradeAllowed())TI_FiBuy=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,SL_Buy,TP_Buy,NULL,MN_FiBuy,clrBlue);
if(IsTradeContextBusy())Sleep(slMS);}}// Nach OC1 gar keine Orders offen.
//=============================================================================================================
// O R D E R S E A R C H 2 ( j )
//=============================================================================================================
for(j=OrdersTotal()-1;j>=0;j--){
if(OrderSelect(j,SELECT_BY_POS)){
if(OrderSymbol()==Symbol()){
if(OrderMagicNumber()==MN_FiBuy)fiLO=true;
if(OrderMagicNumber()==MN_FiSel)fiSH=true;
if(OrderMagicNumber()==MN_NeBuy)neLO=true;
if(OrderMagicNumber()==MN_NeSel)neSH=true;}}}
//=============================================================================================================
// O R D E R C H E C K 2
//=============================================================================================================
// Wenn nach OS2/OC2 FirstBuy und FirstSel offen sind...
if( fiLO==true && fiSH==true ){// ?
//=============================================================================================================
// ( O S 2 ) D C A O - B E R E C H N U N G E N
//=============================================================================================================
for(k=OrdersTotal()-1;k>=0;k--){
if(OrderSelect(k,SELECT_BY_POS)){
if(OrderSymbol()==Symbol()){
if(OrderMagicNumber()==MN_FiBuy)DCAO_FiBuy=NormalizeDouble( OrderOpenPrice() + D_CAO *Point,Digits);
if(OrderMagicNumber()==MN_FiSel)DCAO_FiSel=NormalizeDouble( OrderOpenPrice() - D_CAO *Point,Digits);}}}
//=============================================================================================================
// O R D E R S E A R C H 3 ( k )
//=============================================================================================================
for(k=OrdersTotal()-1;k>=0;k--){
if(OrderSelect(k,SELECT_BY_POS)){
if(OrderSymbol()==Symbol()){
if(OrderMagicNumber()==MN_NeBuy)neLO=true;
if(OrderMagicNumber()==MN_NeSel)neSH=true;}}}
//=============================================================================================================
// ( O S 3 ) O P E N N E X T S E L B Y F I R S T B U Y
//=============================================================================================================
//...wenn nach OS3 (k) noch kein NextBuy offen ist...
if( neLO==false ){
// ...FirstBuy raus suchen:
for(l=OrdersTotal()-1;l>=0;l--){
if(OrderSelect(l,SELECT_BY_POS)){
if(OrderSymbol()==Symbol()){
if( OrderMagicNumber()==MN_FiBuy ){
// ...DON_Sel berechnen:
DON_Sel=NormalizeDouble( OrderOpenPrice() - D_ONO *Point,Digits);
// Lots für NextSel-By-FirstBuy berechnen:
Lots_Sel = OrderLots() * Lots_Multi;}}}}
//Wenn FirstBuy unter DON-Sel ist...
if( Bid < DON_Sel ){// ?
// Wenn FirstSel über DCAO ist...
if( Ask > DCAO_FiSel ){// ?
//
OL=0.0;
for(l=OrdersTotal()-1;l>=0;l--){
if(OrderSelect(l,SELECT_BY_POS)){
if(OrderSymbol()==Symbol()){
if(OrderMagicNumber()==MN_NeSel){
if( OrderLots() > OL )OL = OrderLots();
}}}}
// Wenn weniger NextSel als 1 offen sind, NextSel-by-firstBuy öffnen:
if( Lots_Sel > OL ){
if(IsTradeAllowed())TI_NeSel=OrderSend(Symbol(),OP_SELL,Lots_Sel,Bid,Slippage,SL_Sel,TP_Sel,NULL,MN_NeSel,clrBlue);
if(IsTradeContextBusy())Sleep(slMS);
Print( "NextSel-by-FirstBuy:",
"-OL()=",OrderLots(),
"-Lots_Multi=",Lots_Multi,
"-Lots_Sel=",Lots_Sel,
"-DCAO_FiBuy=",DCAO_FiBuy,
"-DCAO_FiSel=",DCAO_FiSel
);
}}} }// Nach OC2 noch kein NextBuy offen.
//=============================================================================================================
//( O S 3 ) O P E N N E X T B U Y B Y F I R S T S E L
//=============================================================================================================
//Wenn nach OS3 noch kein NextSel offen ist...
if( neSH==false ){
// ...FirstSel raus suchen:
for(l=OrdersTotal()-1;l>=0;l--){
if(OrderSelect(l,SELECT_BY_POS)){
if(OrderSymbol()==Symbol()){
if( OrderMagicNumber()==MN_FiSel ){
// DON-Buy für FirstSel ausrechnen...
DON_Buy=NormalizeDouble( OrderOpenPrice() + D_ONO *Point,Digits);
Lots_Buy = OrderLots() * Lots_Multi;}}}}
// Wenn FirstSel über DON_Buy ist...
if( Ask > DON_Buy ){// ?
// ...wenn FirstBuy unter DCAO ist:
if( Bid < DCAO_FiBuy ){// ?
// Zählen, wie viele NextBuy-by-FirstSel bereits offen sind:
OL=0.0;
for(m=OrdersTotal()-1;m>=0;m--){
if(OrderSelect(m,SELECT_BY_POS)){
if(OrderSymbol()==Symbol()){
if(OrderMagicNumber()==MN_NeBuy){
if( OrderLots() > OL )OL = OrderLots();
}}}}
if( Lots_Buy > OL ){
if(IsTradeAllowed())TI_NeBuy=OrderSend(Symbol(),OP_BUY,Lots_Buy,Ask,Slippage,SL_Buy,TP_Buy,NULL,MN_NeBuy,clrBlue);
if(IsTradeContextBusy())Sleep(slMS);
Print( "NextBuy-by-FirstSel:",
"-OL()=",OrderLots(),
"-Lots_Multi=",Lots_Multi,
"-Lots_Buy=",Lots_Buy,
"-DCAO_FiBuy=",DCAO_FiBuy,
"-DCAO_FiSel=",DCAO_FiSel
);
}}} }// Nach OS3 noch kein NextSel offen.
//=============================================================================================================
// ( O S 3 ) O P E N M O R E S E L B Y N E X T B U Y
//=============================================================================================================
// Wenn nach OS4 doch Next-NextBuy offen ist...
if( neLO==true ){
// ...berechnen, ob NextBuy unter DON_Sel ist:
for(m=OrdersTotal()-1;m>=0;m--){
if(OrderSelect(m,SELECT_BY_POS)){
if(OrderSymbol()==Symbol()){
if( OrderMagicNumber()==MN_NeBuy ){
DON_Sel=NormalizeDouble( OrderOpenPrice() - D_ONO *Point,Digits);}}}}
// Wenn letzter NextBuy unter DON_Sel ist...
if( Bid < DON_Sel ){// ?
// Wenn FirstSel über DCAO ist...
if( Ask > DCAO_FiSel ){// ?
// ...Lots für NextSel-by-NextBuy berechnen
L_LO=1.0;
for(m=OrdersTotal()-1;m>=0;m--){
if(OrderSelect(m,SELECT_BY_POS)){
if(OrderSymbol()==Symbol()){
if( OrderMagicNumber()==MN_FiBuy || OrderMagicNumber()==MN_NeBuy ){
Lots_Sel = L_LO * OrderLots() * Lots_Multi;
L_LO = Lots_Sel;
Print("Lots NextSel:",
"-L_LO=",L_LO,
"-OL()=",OrderLots(),
"-Lots_Sel=",Lots_Sel,
"-DCAO_FiBuy=",DCAO_FiBuy,
"-DCAO_FiSel=",DCAO_FiSel
);
}}}}
// ...Prüfen, ob schon NextSel mit letztem Lots_Sel-Ergebnis geöffnet wurde:
OL=0.0;
for(n=OrdersTotal()-1;n>=0;n--){
if(OrderSelect(n,SELECT_BY_POS)){
if(OrderSymbol()==Symbol()){
if( OrderMagicNumber()==MN_NeSel ){
if( OrderLots() > OL )OL = OrderLots();
}}}}
// Wenn ... , weitere NextSel öffnen:
if( Lots_Sel > OL ){
if(IsTradeAllowed())TI_NeSel=OrderSend(Symbol(),OP_SELL,Lots_Sel,Bid,Slippage,SL_Sel,TP_Sel,NULL,MN_NeSel,clrBlue);
if(IsTradeContextBusy())Sleep(slMS);
Print("Next Sel:"
"-OL()=",OrderLots(),
"-Lot_LO=",L_LO,
"-Lots_Sel=",Lots_Sel,
"-DCAO_FiBuy=",DCAO_FiBuy,
"-DCAO_FiSel=",DCAO_FiSel
);
}}} }// Nach OS3 Next-NextBuy offen
//=============================================================================================================
// ( O S 3 ) O P E N M O R E B U Y B Y N E X T S E L
//=============================================================================================================
// ...wenn nach OS3 doch NextSel offen ist...
if( neSH==true ){
// ...prüfen, ob NeSel über DON_Buy ist:
for(p=OrdersTotal()-1;p>=0;p--){
if(OrderSelect(p,SELECT_BY_POS)){
if(OrderSymbol()==Symbol()){
if( OrderMagicNumber()==MN_NeSel ){
DON_Buy=NormalizeDouble( OrderOpenPrice() + D_ONO *Point,Digits);}}}}
// Wenn NextSel über DON_Buy ist...
if( Ask > DON_Buy ){// ?
// ...prüfen, ob FirstBuy DCAO erreicht hat:
if( Bid < DCAO_FiBuy ){// ?
L_SH=1.0;
for(m=OrdersTotal()-1;m>=0;m--){
if(OrderSelect(m,SELECT_BY_POS)){
if(OrderSymbol()==Symbol()){
if( OrderMagicNumber()==MN_FiSel || OrderMagicNumber()==MN_NeSel ){
Lots_Buy = L_SH * OrderLots() * Lots_Multi;
L_SH = Lots_Buy;
Print( "Lots NextBuy:",
"-OL()=",OrderLots(),
"-L_SH=",L_SH,
"-Lots_Buy=",Lots_Buy
);
}}}}
// ...Prüfen, ob schon NextBuy mit letztem Lots_Buy-Ergebnis geöffnet wurde:
OL=0.0;
for(n=OrdersTotal()-1;n>=0;n--){
if(OrderSelect(n,SELECT_BY_POS)){
if(OrderSymbol()==Symbol()){
if( OrderMagicNumber()==MN_NeBuy ){
if( OrderLots() > OL )OL = OrderLots();
}}}}
// Wenn ... , weitere NextBuy öffnen:
if( Lots_Buy > OL ){
if(IsTradeAllowed())TI_NeBuy=OrderSend(Symbol(),OP_BUY,Lots_Buy,Ask,Slippage,SL_Buy,TP_Buy,NULL,MN_NeBuy,clrBlue);
if(IsTradeContextBusy())Sleep(slMS);
Print("Next Buy:"
"-OL()=",OrderLots(),
"-L_SH=",L_SH,
"-Lots_Buy=",Lots_Buy,
"-DCAO_FiBuy=",DCAO_FiBuy,
"-DCAO_FiSel=",DCAO_FiSel
);
}}} }// nach OS3 Next-NextSel offen.
//=============================================================================================================
// N A C H O S 2 F I R S T - S E L U N D F I R S T B U Y O F F E N
//=============================================================================================================
}// Nach OS2 FirstSel und FirstBuy offen.
//=============================================================================================================
// C L O S E A L L B Y F I R S T O R D E R S
//=============================================================================================================
//Wenn FirstSel unter DCAO / FirstBuy über DCAO ist, alle Orders schließen.
if( Ask < DCAO_FiSel || Bid > DCAO_FiBuy ){// ?
for(z=OrdersTotal()-1;z>=0;z--){
if(OrderSelect(z,SELECT_BY_POS)){
if(OrderSymbol()==Symbol()){
if(OrderMagicNumber()==MN_NeSel||OrderMagicNumber()==MN_FiSel){
if(IsTradeAllowed())OC_Sel=OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,clrRed);
if(IsTradeContextBusy())Sleep(slMS);}
if(OrderMagicNumber()==MN_NeBuy||OrderMagicNumber()==MN_FiBuy){
if(IsTradeAllowed())OC_Buy=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,clrRed);
if(IsTradeContextBusy())Sleep(slMS);}}}} }// FirstSel/FirstBuy hat DCAO-Dist erreicht.
//=============================================================================================================
// E A F U N K T I O N E N B E E N D E N
//=============================================================================================================
}// void OnTick()
|