Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4885
Beiträge: 42964
Benutzer: 7.176
Aktive Benutzer: 83
Links: 83
Wir begrüßen unseren neuesten Benutzer: NiceMods
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 4 Tagen
- NiceMods
vor einer Woche
- schlupjup
vor einer Woche
- Brunow
vor einer Woche
- Berndt
vor einer Woche
- hellbird

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 29
Gesamt: 29
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 12.08.22
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.178
MA-EA befindet sich auf einem aufstrebenden Ast
Standard EA öffnet zu viele Orders

Hallo.


Experimentiere ein bißchen mit nem MartinGale-EA rum. Auch wenn die Strategie umstritten ist, ich hab einfach Bock, nen bißchen damit herum zu experimentieren.


Aber der EA öffnet anscheinend willkürlich Orders und schließt sie willkürlich. Manchmal macht er was er soll, manchmal nicht. Hab den gesamten Code bestimmt 5 mal komplett durch geguckt, Alles mögliche ausprobiert, das Problem besteht weiterhin.


Im Strategietester kommt immer Error 134, was wohl irgendwas mit der Margin zu tun hat, aber der Kontostand ist anfangs bei 10k und sinkt dann mit jeder willkürlichen Order um ca. 14 - 16 Cent.


Code:
/*=============================================================================================================
// N O T I Z E N   U N D   I N F O S
//=============================================================================================================


//-------------------------------------------------------------------------------------------------------------

In dieser Vers. ShLo_TI_v2.mq4...


- ...


- ...werden die OrderLots() der letzten Verlust-Order
     mit Lots_Multi erhöht.


- ...wird nur eine First-Order geöffnet.


- ...gibt es 2 OS.


- ...gibt es ? OC.



//-------------------------------------------------------------------------------------------------------------


//=============================================================================================================
// 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"ShLo_TI_v2.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";
//=============================================================================================================
// E I N S T E L L U N G E N
//=============================================================================================================
extern string esOFO="Open First Order";
input bool Sel_noBuy=false;
input bool Buy_noSel=true;
//-----------------------------------------------------------------------------------------------------------*/
extern string esMN="Magic Numbers";
extern int MN_FirstSel=12;
extern int MN_FirstBuy=34;
extern int MN_NextSel=56;
extern int MN_NextBuy=78;
//-----------------------------------------------------------------------------------------------------------*/
extern string esOOFT1="Open Orders";
extern string esOOFT2="from/till Hour";
extern string esOOFT3="(Server Time)";
extern int FromH=4;//  Vor 4 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=123456;
//-----------------------------------------------------------------------------------------------------------*/
extern int SL=200;// ? Zum Testen 200
//-----------------------------------------------------------------------------------------------------------*/
extern int TP=200;// ? Zum Testen 200
//-----------------------------------------------------------------------------------------------------------*/
extern string esITCBSMS1="if IsTradeContexBusy()";
extern string esITCBSMS2="sleep MS";
extern int slMS=80;// ? Zum Testen 80ms 
//-----------------------------------------------------------------------------------------------------------*/
extern string esDONO1="Dist to OrderOpenPrice()";
extern string esDONO2="open next Order";
extern int DONO=33;// ? Zum Testen 33 ( Verl. pro Order ca.  54  P ? )
//-----------------------------------------------------------------------------------------------------------*/
extern string esDCAO1="Dist to OrderOpenPrice()";
extern string esDCAO2="close all Orders";
extern int DCAO=35;// ? Zum Testen 35 ( Gew. pro Order ca.  15  P ? )
//-----------------------------------------------------------------------------------------------------------*/

extern string esL="Lots";

extern int Lots_Digits=2;

extern double Lots_Start=0.01;

extern double Lots_Multi=4.0;// ? Mindestens 3.0 ?

//-----------------------------------------------------------------------------------------------------------*/

//=============================================================================================================
// 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// OrderClose

;
//-----------------------------------------------------------------------------------------------------------*/
double

SPR,// Spread

SL_Sel,SL_Buy,TP_Sel,TP_Buy,MSL,// MinStopLevel
DON_Sel,DON_Buy,
DCAO_Sel,DCAO_Buy,

Lots_Sel,Lots_Buy,

OL,// Lots einer bestimmten Order.

LSel_DTS,LSel_STD,LBuy_DTS,LBuy_STD

;
//-----------------------------------------------------------------------------------------------------------*/
int

i,

TI_FiSel,TI_FiBuy,TI_NeSel,TI_NeBuy

;
//=============================================================================================================
// L O T S
//=============================================================================================================

double mL = MarketInfo(Symbol(),MODE_MINLOT);
double Mr = MarketInfo(Symbol(),MODE_MARGINREQUIRED);

//=============================================================================================================
// 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);}
//=============================================================================================================
// S P R E A D
//=============================================================================================================
SPR=DoubleToStr(Ask-Bid,Digits);


//=============================================================================================================
// O R D E R   S E A R C H   1
//=============================================================================================================
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_FirstBuy)fiLO=true;
  if(OrderMagicNumber()==MN_FirstSel)fiSH=true;
  if(OrderMagicNumber()==MN_NextBuy)neLO=true;
  if(OrderMagicNumber()==MN_NextSel)neSH=true;}}}
//=============================================================================================================
//   O R D E R   C H E C K   1
//=============================================================================================================

// Wenn zur Zeit Orders geöffnet werden dürfen...
if( Hour()>=FromH && Hour()<=TillH ){

// ...wenn nach OS1/OC1 gar keine Orders offen sind...
  if( fiLO==false && fiSH==false && neLO==false && neSH==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
//=============================================================================================================

    if(Sel_noBuy==true){
      if(IsTradeAllowed())TI_FiSel=OrderSend(Symbol(),OP_SELL,Lots_Start,Bid,Slippage,SL_Sel,TP_Sel,NULL,MN_FirstSel,clrBlue);
      if(IsTradeContextBusy())Sleep(slMS);
      Print("-Spr=",DoubleToStr(SPR,Digits));}

    if(Buy_noSel==true){
      if(IsTradeAllowed())TI_FiBuy=OrderSend(Symbol(),OP_BUY,Lots_Start,Ask,Slippage,SL_Buy,TP_Buy,NULL,MN_FirstBuy,clrBlue);
      if(IsTradeContextBusy())Sleep(slMS);
      Print("-Spr=",DoubleToStr(SPR,Digits));}

} }// OS1/OC1 Time Check

//=============================================================================================================
// O R D E R   S E A R C H   2
//=============================================================================================================
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_FirstBuy)fiLO=true;
  if(OrderMagicNumber()==MN_FirstSel)fiSH=true;
  if(OrderMagicNumber()==MN_NextBuy)neLO=true;
  if(OrderMagicNumber()==MN_NextSel)neSH=true;}}}
//=============================================================================================================
// ( O C 2 )   O P E N   N E X T S E L   B Y   F I R S T B U Y
//=============================================================================================================

// Wenn FirstBuy und noch kein NextBuy offen ist... 
if( fiLO==true && neLO==false ){

//-----------------------------------------------------------------------------------------------------------*/


//...FirstBuy auswählen...
  if(OrderSelect(TI_FiBuy,SELECT_BY_TICKET)){

//  ...DCAO-Buy berechnen:
    DCAO_Buy = NormalizeDouble( OrderOpenPrice() + DCAO *Point,Digits);

//  ...DON_Sel berechnen:
    DON_Sel = NormalizeDouble( OrderOpenPrice() - DONO *Point,Digits);

//  Lots_Sel für NextSel berechnen:
    Lots_Sel = OrderLots() * Lots_Multi;

//  EA an FirstBuy-Ticket "erinnern".
    TI_FiBuy=OrderTicket();
  
  }// nach OC2 FirstBuy ausgewählt.


//-----------------------------------------------------------------------------------------------------------*/


//Wenn FirstBuy unter DON_Sel ist...
  if( Bid < DON_Sel ){// ? Vermutlich Muss Bid unter DON_Sel sein?        


//  Wenn Sel über DCAO-Sel ist...
    if( Ask > DCAO_Sel ){// ?


//  ...prüfen, ob schon NextSel mit entsprechendem Lots_Sel-Ergebnis offen ist:
    OL=Lots_Start;
    for(i=OrdersTotal()-1;i>=0;i--){
    if(OrderSelect(i,SELECT_BY_POS)){
    if(OrderSymbol()==Symbol()){
      if( OrderMagicNumber()==MN_NextSel ){
        if( OrderLots() > OL )OL = OrderLots();}}}}

    LSel_DTS=DoubleToStr(Lots_Sel,Lots_Digits);
    LSel_STD=StrToDouble(LSel_DTS);


//  Wenn noch kein NextSel mit letzten NextSel-Lots offen ist... 
    if( LSel_STD > OL ){
  
//    ...NextSel öffnen:
      if(IsTradeAllowed())TI_NeSel=OrderSend(Symbol(),OP_SELL,LSel_STD,Bid,Slippage,SL_Sel,TP_Sel,NULL,MN_NextSel,clrNONE);
      if(IsTradeContextBusy())Sleep(slMS);

      }// kein NextSel mit Lots_NextSel-Ergebnis offen

    }// Bid über DCAO-Sel

  }// Bid unter DON_Sel

}// Nach OC2 noch kein NextBuy offen


//=============================================================================================================
// ( O C 2 )   O P E N   N E X T B U Y   B Y   F I R S T S E L
//=============================================================================================================

// Wenn nach OC2 FirstSel und noch kein NextSel offen ist...
if( fiSH==true && neSH==false ){

//-----------------------------------------------------------------------------------------------------------*/


//FirstSel auswählen...
  if(OrderSelect(TI_FiSel,SELECT_BY_TICKET)){

//  D_CAO-Sel ausrechnen:    
    DCAO_Sel=NormalizeDouble( OrderOpenPrice() - DCAO *Point,Digits);

//  ...DON_Buy ausrechnen...
    DON_Buy=NormalizeDouble( OrderOpenPrice() + DONO *Point,Digits);

//  Lots_Buy berechnen...
    Lots_Buy = OrderLots() * Lots_Multi;

//  EA an FirstSel-Ticket "erinnern".
    TI_FiSel=OrderTicket();
  
  }// FirstSel ausgewählt


//-----------------------------------------------------------------------------------------------------------*/


//Wenn FirstSel über DON_Buy ist...
  if( Ask > DON_Buy ){// ?


//  Wenn Buy unter DCAO-Buy ist...
    if( Bid < DCAO_Buy ){// ?
    
    
//  ...Prüfen, ob schon NextBuy mit entsprechendem Lots_Buy-Ergebnis offen ist:
    OL=Lots_Start;
    for(i=OrdersTotal()-1;i>=0;i--){
    if(OrderSelect(i,SELECT_BY_POS)){
    if(OrderSymbol()==Symbol()){
      if( OrderMagicNumber()==MN_NextBuy ){
        if( OrderLots() > OL )OL = OrderLots();}}}}

    LBuy_DTS=DoubleToStr(Lots_Buy,Lots_Digits);
    LBuy_STD=StrToDouble(LBuy_DTS);

//  Wenn noch kein NextBuy mit letzten Buy-Lots offen ist...
    if( LBuy_STD > OL ){

//    ...NextBuy öffnen...
      if(IsTradeAllowed())TI_NeBuy=OrderSend(Symbol(),OP_BUY,LBuy_STD,Ask,Slippage,SL_Buy,TP_Buy,NULL,MN_NextBuy,clrNONE);
      if(IsTradeContextBusy())Sleep(slMS);

      }// Kein Buy mit letztem Buy-Lots-Wert offen

    }// Ask unter DCAO-Buy
  
  }// Sel über DON_Buy

}// Nach OC2 noch kein NextSel offen


//=============================================================================================================
// ( O C 2 )   O P E N   N E X T S E L   B Y   N E X T B U Y
//=============================================================================================================

// Wenn nach OC2 doch NextBuy offen ist...
if( neLO==true ){

//-----------------------------------------------------------------------------------------------------------*/


//...NextBuy auswählen...
  if(OrderSelect(TI_NeBuy,SELECT_BY_TICKET)){

//  ...DCAO-NextBuy berechnen:
    DCAO_Buy = NormalizeDouble( OrderOpenPrice() + DCAO *Point,Digits);

//  ...DON_Sel berechnen:
    DON_Sel = NormalizeDouble( OrderOpenPrice() - DONO *Point,Digits);

//  Lots_Sel für NextSel berechnen:
    Lots_Sel = OrderLots() * Lots_Multi;

//  EA an NextBuy-Ticket "erinnern".
    TI_NeBuy=OrderTicket();

  }// NextBuy ausgewählt.


//-----------------------------------------------------------------------------------------------------------*/


//Wenn NextBuy unter DON_Sel ist...
  if( Bid < DON_Sel ){// ? Vermutlich Muss Bid unter DON_Sel sein?        


//  ...wenn NextSel über DCAO-Sel ist...
    if( Ask > DCAO_Sel ){// ?


//  ...prüfen, ob schon NextSel mit entsprechendem Lots_Sel-Ergebnis offen ist:
    OL=Lots_Start;
    for(i=OrdersTotal()-1;i>=0;i--){
    if(OrderSelect(i,SELECT_BY_POS)){
    if(OrderSymbol()==Symbol()){
      if( OrderMagicNumber()==MN_NextSel ){
        if( OrderLots() > OL )OL = OrderLots();}}}}

    LSel_DTS=DoubleToStr(Lots_Sel,Lots_Digits);
    LSel_STD=StrToDouble(LSel_DTS);


//  Wenn noch kein NextSel mit letzen NextSel-Lots offen ist... 
    if( LSel_STD > OL ){
  
//    ...NextSel öffnen:
      if(IsTradeAllowed())TI_NeSel=OrderSend(Symbol(),OP_SELL,LSel_STD,Bid,Slippage,SL_Sel,TP_Sel,NULL,MN_NextSel,clrNONE);
      if(IsTradeContextBusy())Sleep(slMS);

      }// kein NextSel mit Lots_NextSel-Ergebnis offen

    }

  }// Bid unter DON_Sel

}// Nach OC2 doch NextBuy offen


//=============================================================================================================
// ( O C 2 )   O P E N   N E X T B U Y   B Y   N E X T S E L
//=============================================================================================================

// Wenn nach OC2 doch NextSel offen ist...
if( neSH==true ){

//-----------------------------------------------------------------------------------------------------------*/

//...NextSel auswählen...
  if(OrderSelect(TI_NeSel,SELECT_BY_TICKET)){

//  DCAO-Sel ausrechnen:    
    DCAO_Sel=NormalizeDouble( OrderOpenPrice() - DCAO *Point,Digits);

//  ...DON_Buy ausrechnen...
    DON_Buy=NormalizeDouble( OrderOpenPrice() + DONO *Point,Digits);

//  Lots_Buy berechnen...
    Lots_Buy = OrderLots() * Lots_Multi;

//  EA an NextSel-Ticket "erinnern".
    TI_NeSel=OrderTicket();
  
  }// NextSel ausgewählt

//-----------------------------------------------------------------------------------------------------------*/


//Wenn NextSel über DON_Buy ist...
  if( Ask > DON_Buy ){// ?


//  Wenn Buy unter DCAO-Buy ist...
    if( Bid < DCAO_Buy ){// ?


//  ...Prüfen, ob schon NextBuy mit entsprechendem Lots_Buy-Ergebnis offen ist:
    OL=Lots_Start;
    for(i=OrdersTotal()-1;i>=0;i--){
    if(OrderSelect(i,SELECT_BY_POS)){
    if(OrderSymbol()==Symbol()){
      if( OrderMagicNumber()==MN_NextBuy ){
        if( OrderLots() > OL )OL = OrderLots();}}}}

    LBuy_DTS=DoubleToStr(Lots_Buy,Lots_Digits);
    LBuy_STD=StrToDouble(LBuy_DTS);

//  Wenn noch kein NextBuy mit letzten Buy-Lots offen ist...
    if( LBuy_STD > OL ){

//    ...NextBuy öffnen...
      if(IsTradeAllowed())TI_NeBuy=OrderSend(Symbol(),OP_BUY,LBuy_STD,Ask,Slippage,SL_Buy,TP_Buy,NULL,MN_NextBuy,clrNONE);
      if(IsTradeContextBusy())Sleep(slMS);


      }// Kein Buy mit letztem Buy-Lots-Wert offen

    }
  
  }// NextSel über DON_Buy

}// Nach OC2 doch NextSel offen


//=============================================================================================================
// C L O S E   A L L   O R D E R S
//=============================================================================================================

if( Ask <= DCAO_Sel || Bid >= DCAO_Buy ){

  Print("-Margin=",DoubleToStr(AccountMargin(),2));

  for(i=OrdersTotal()-1;i>=0;i--){
  if(OrderSelect(i,SELECT_BY_POS)){
  if(OrderSymbol()==Symbol()){

    if(OrderMagicNumber()==MN_FirstSel||OrderMagicNumber()==MN_NextSel){
      if(IsTradeAllowed())OC=OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,clrNONE);
      if(IsTradeContextBusy())Sleep(slMS);}
  
    if(OrderMagicNumber()==MN_FirstBuy||OrderMagicNumber()==MN_NextBuy){
      if(IsTradeAllowed())OC=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,clrNONE);
      if(IsTradeContextBusy())Sleep(slMS);}

}}} }// DCAO erreicht

//=============================================================================================================
// E A   F U N K T I O N E N   B E E N D E N
//=============================================================================================================
}// void OnTick()
Angehängte Dateien
Dateityp: mq4 ShLo_TI_v2.mq4 (37,7 KB, 0x aufgerufen)
Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +2. Es ist jetzt 01:57 Uhr.





Die Suchmaschine - Der Wavesnode - Facebook Forum - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2022 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2020 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------