MT4 - Martin Gale-EA öffnet zu viele Positionen

 

Hallo.

Seit Wochen schlag ich mich mit nem EA rum. Er soll vollautomatisch ne Art Martin-Gale Strategie im Metatrader 4 traden.

Er soll zuerst eine Sell- und eine Buy-Order öffnen. Je nachdem ob Ask / Bid  nen gewissen Abstand zum OrderOpenPrice() der ersten Orders erreichen, sollen in die entsprechende Richtung weitere Orders geöffnet werden. Also geht z.B. der Sell 20 Pips long über seinen OOP(), sollen dort 2 weitere Buy-Orders geöffnet werden und immer so weiter. Bis Ask / Bid ne Art Gewinn-Distanz der 1. Orders erreichen. Also geht z.B. der Bid long 40 Pips über den OOP() der 1. Buy-Order, sollen alle Orders geschlossen werden und das Ganze von vorn los gehn.

Allerdings öffnet er immer viel mehr Orders als er soll. Hab unzählige Male getestet, durch geguckt, etliche Sachen geändert. Weiß einfach nicht warum. Kann leider derzeit die Datei nicht hochladen, nur den Code rein kopieren.

//=============================================================================================================
// 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"LoShTi_PenOrd_v1b.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 esMN="Magic Numbers";

extern int MN_FiSel=1;
extern int MN_FiBuy=2;

extern int MN_Sel_FiBuy=3;
extern int MN_Buy_FiSel=4;

extern int MN_NeSel=5;
extern int MN_NeBuy=6;

//-----------------------------------------------------------------------------------------------------------*/
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=15;// Zum Testen bis einschließlich 15 Uhr öffnen lassen.
//-----------------------------------------------------------------------------------------------------------*/
extern string esTF="TimeFrame";
input ENUM_TIMEFRAMES TF=1;// Zum Testen M1
//-----------------------------------------------------------------------------------------------------------*/
extern int Slippage=12345;
//-----------------------------------------------------------------------------------------------------------*/
extern int SL=40;// zum Testen 40
//-----------------------------------------------------------------------------------------------------------*/
extern int TP=40;// zum Testen 40
//-----------------------------------------------------------------------------------------------------------*/
extern string esIITCBSMS1="if IsTradeContexBusy()";
extern string esIITCBSMS2="sleep MS";
extern int slMS=20;// Zum Testen 20ms
//-----------------------------------------------------------------------------------------------------------*/
extern string esDOONO1="Dist to OrderOpenPrice()";
extern string esDOONO2="open next Order";
extern int D_ONO=20;// Zum Testen 20
//-----------------------------------------------------------------------------------------------------------*/
extern int OrdersNeed_Multi=2;// Zum Testen 2. 1-4?
//-----------------------------------------------------------------------------------------------------------*/
extern double Lots=0.01;
//=============================================================================================================
// G L O B A L E   D E K L A R A T I O N E N
//=============================================================================================================
bool

fi_SH,fi_LO,
SH_fiLO,LO_fiSH,
ne_SH,ne_LO,
OM_Sel,OM_Buy,
OC_Sel,OC_Buy,
OD

;

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


SL_Sel,SL_Buy,SL_FiSel,SL_FiBuy,

TP_Sel,TP_Buy,TP_FiSel,TP_FiBuy,

MSL,

OOP_Sel_FiBuy,OOP_Buy_FiSel,

OOP_Buy_NeSel,OOP_Sel_NeBuy


;

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

i,j,k,l,m,n,o,p,q,r,

TI_FiSel,TI_FiBuy,

TI_Sel_FiBuy,TI_Buy_FiSel,

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
//=============================================================================================================
if(SL<1){
SL_Sel=0.0;
SL_Buy=0.0;}
if(SL>=1){
SL_Sel=NormalizeDouble(Bid+SL*Point,Digits);
SL_Buy=NormalizeDouble(Ask-SL*Point,Digits);}
//SL genauso groß wie Minstoplevels machen, wenn er kleiner ist.
MSL=MarketInfo(Symbol(),MODE_STOPLEVEL);
if(SL_Sel<MSL)SL_Sel=MSL;
if(SL_Buy<MSL)SL_Buy=MSL;
//=============================================================================================================
// 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>=1){
TP_Sel=NormalizeDouble(Bid-TP*Point,Digits);
TP_Buy=NormalizeDouble(Ask+TP*Point,Digits);}
//=============================================================================================================
// O R D E R   S E A R C H   1
//=============================================================================================================
fi_SH=false;
fi_LO=false;
LO_fiSH=false;
SH_fiLO=false;
ne_SH=false;
ne_LO=false;
for(i=OrdersTotal()-1;i>=0;i--){
if(OrderSelect(i,SELECT_BY_POS)){
if(OrderSymbol()==Symbol()){
if(OrderMagicNumber()==MN_FiSel)fi_SH=true;
if(OrderMagicNumber()==MN_FiBuy)fi_LO=true;
if(OrderMagicNumber()==MN_Buy_FiSel)LO_fiSH=true;
if(OrderMagicNumber()==MN_Sel_FiBuy)SH_fiLO=true;  
if(OrderMagicNumber()==MN_NeSel)ne_SH=true;
if(OrderMagicNumber()==MN_NeBuy)ne_LO=true;}}}
//=============================================================================================================
// ( O C 1 )   O P E N   F I R S T   S E L L / O P E N   F I R S T   B U Y
//=============================================================================================================
//Wenn gar keine Orders offen sind...
if(fi_SH==false&&fi_LO==false&&LO_fiSH==false&&SH_fiLO==false&&ne_SH==false&&ne_LO==false){
//...alle Zähler auf 0 setzen...
  Opened_Sel=0;
  Opened_Buy=0;
  Need_Sel=0;
  Need_Buy=0;
//...und wenn zur Zeit Orders geöffnet werden dürfen, FirstSel und FirstBuy öffnen.
  if(Hour()>=FromH&&Hour()<=TillH){
    if(IsTradeAllowed()==true)TI_FiSel=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL_Sel,TP_Sel,NULL,MN_FiSel,clrBlue);
    if(IsTradeContextBusy()==true)Sleep(slMS);
    if(IsTradeAllowed()==true)TI_FiBuy=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,SL_Buy,TP_Buy,NULL,MN_FiBuy,clrBlue);
    if(IsTradeContextBusy()==true)Sleep(slMS);}}// Nach OC1 gar keine Orders offen.
//=============================================================================================================
//  O R D E R   C H E C K   2
//=============================================================================================================
// Wenn nach OC2 nur FirstSel und FirstBuy offen sind...
if( fi_SH==true && fi_LO==true ){
//=============================================================================================================
// ( O C 2 )   O R D E R   M O D I F Y   F I R S T S E L
//=============================================================================================================
//...wenn nach OC2 noch kein NextBuy offen ist...
  if( LO_fiSH==false && ne_LO==false){
//-----------------------------------------------------------------------------------------------------------*/
//  ...FirstSel SL und TP genau mit OOP berechnen:
    if(OrderSelect(TI_FiSel,SELECT_BY_TICKET)){
    if(OrderSymbol()==Symbol()){
      SL_FiSel = NormalizeDouble( OrderOpenPrice() + SL *Point,Digits);
      TP_FiSel = NormalizeDouble( OrderOpenPrice() - TP *Point,Digits);
      if(OrderStopLoss()!=SL_FiSel||OrderTakeProfit()!=TP_FiSel)OM_Sel=OrderModify(OrderTicket(),OrderOpenPrice(),SL_FiSel,TP_FiSel,Blue);}}
//=============================================================================================================
// ( 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 nach OC1 noch kein NextBuy offen ist...
//...OOP für NextSel-by-FirstBuy berechnen:
  if(OrderSelect(TI_FiBuy,SELECT_BY_TICKET)){
  if(OrderSymbol()==Symbol()){

    OOP_Sel_FiBuy = NormalizeDouble( OrderOpenPrice() - D_ONO *Point,Digits);

    for( k=OrdersNeed_Multi ; k>0 ; k-- ){// ?
      if(IsTradeAllowed()==true)TI_Sel_FiBuy = OrderSend(Symbol(),OP_SELLSTOP,Lots,OOP_Sel_FiBuy,Slippage,SL_FiSel,TP_FiSel,NULL,MN_Sel_FiBuy,0,Blue);
      if(IsTradeContextBusy()==true)Sleep(slMS);
      Opened_Sel++;} } }// Nach OS2 FirstBuy ausgewählt.
//-----------------------------------------------------------------------------------------------------------*/
  }// Nach OC2 noch kein NextBuy offen.
//=============================================================================================================
// ( O C 2 )   O R D E R   M O D I F Y   F I R S T B U Y
//=============================================================================================================
//...wenn nach OC2 noch kein NextSel offen ist...
  if( SH_fiLO==false && ne_SH==false ){
//-----------------------------------------------------------------------------------------------------------*/
//  ...FirstBuy SL und TP genau mit OOP berechnen:
    if(OrderSelect(TI_FiBuy,SELECT_BY_TICKET)){
    if(OrderSymbol()==Symbol()){
      SL_FiBuy = NormalizeDouble( OrderOpenPrice() - SL *Point,Digits);
      TP_FiBuy = NormalizeDouble( OrderOpenPrice() + TP *Point,Digits);
      if(OrderStopLoss()!=SL_FiBuy||OrderTakeProfit()!=TP_FiBuy)OM_Buy=OrderModify(OrderTicket(),OrderOpenPrice(),SL_FiBuy,TP_FiBuy,Blue);}}
//=============================================================================================================
// ( O C 2 )   O P E N   N E X T B U Y   B Y   F I R S T _ S E L
//=============================================================================================================
//  ...OOP für NextBuy-by-FirstSel berechnen:
    if(OrderSelect(TI_FiSel,SELECT_BY_TICKET)){
    if(OrderSymbol()==Symbol()){

    OOP_Buy_FiSel = NormalizeDouble( OrderOpenPrice() + D_ONO *Point,Digits);

    for( l=OrdersNeed_Multi ; l>0 ; l-- ){// ?
      if(IsTradeAllowed()==true)TI_Buy_FiSel = OrderSend(Symbol(),OP_BUYSTOP,Lots,OOP_Buy_FiSel,Slippage,SL_FiBuy,TP_FiBuy,NULL,MN_Buy_FiSel,0,Blue);
      if(IsTradeContextBusy()==true)Sleep(slMS);
      Opened_Buy++;} } }// Nach OC2 FirstSel ausgewählt.
//-----------------------------------------------------------------------------------------------------------*/
  }// Nach OC2 noch kein NextSel offen.
//=============================================================================================================
// ( O C 3 )   O P E N   M O R E   N E X T S E L   B Y   F I R S T _ N E X T B U Y
//=============================================================================================================
// Wenn nach OC3 NextBuy-by-First_Sel offen ist...
  if( LO_fiSH==true ){
//-----------------------------------------------------------------------------------------------------------*/
//  ...wenn nach OC3 noch kein NextBuy-by-Next_Sel offen ist...
    if( ne_LO==false ){
    
//    ...OOP für NextSel-by-FirstNextBuy berechnen:
      if(OrderSelect(TI_Buy_FiSel,SELECT_BY_TICKET)){
      if(OrderSymbol()==Symbol()){
      
      OOP_Sel_NeBuy = NormalizeDouble( OrderOpenPrice() - D_ONO *Point,Digits);
        
      Need_Sel = Opened_Buy * OrdersNeed_Multi;
        
      for( n=Need_Sel ; n>0 ; n-- ){// ?
        if(IsTradeAllowed()==true)TI_NeSel = OrderSend(Symbol(),OP_SELLSTOP,Lots,OOP_Sel_FiBuy,Slippage,SL_FiSel,TP_FiSel,NULL,MN_NeSel,0,Blue);
        if(IsTradeContextBusy()==true)Sleep(slMS);
        Opened_Sel++;} } } }// Nach OC3 noch kein Next-NextBuy offen.
//=============================================================================================================
// ( O C 3 )   O P E N   M O R E   N E X T S E L   B Y   N E X T B U Y
//=============================================================================================================
//  ...wenn nach OS3 doch NextBuy-by-NextSel offen ist...
    if( ne_LO==true ){

//    ...OOP für NextSel-by-NextBuy berechnen:
      if(OrderSelect(TI_NeBuy,SELECT_BY_TICKET)){
      if(OrderSymbol()==Symbol()){

      OOP_Sel_NeBuy = NormalizeDouble( OrderOpenPrice() - D_ONO *Point,Digits);

      Need_Sel = Opened_Buy * OrdersNeed_Multi;
        
      for( o=Need_Sel ; o>0 ; o-- ){// ?
        if(IsTradeAllowed()==true)TI_NeSel = OrderSend(Symbol(),OP_SELLSTOP,Lots,OOP_Sel_NeBuy,Slippage,SL_FiSel,TP_FiSel,NULL,MN_NeSel,0,Blue);
        if(IsTradeContextBusy()==true)Sleep(slMS);
        Opened_Sel++;} } } }// Nach OC3 doch NextBuy-by-NextSel offen.
//-----------------------------------------------------------------------------------------------------------*/
  }// Nach OC3 NextBuy-by-FirstShort offen.
//=============================================================================================================
// ( O C 3 )   O P E N   M O R E   N E X T B U Y   B Y   F I R S T N E X T S E L
//=============================================================================================================
//...wenn NextSel-by-FirstBuy offen ist...
  if( SH_fiLO==true ){
//-----------------------------------------------------------------------------------------------------------*/
//  ...wenn noch kein NextSel-by-NextBuy offen ist...
    if( ne_SH==false ){

//    OOP für NextBuy-by-FirstSel berechnen:
      if(OrderSelect(TI_NeSel,SELECT_BY_TICKET)){
      if(OrderSymbol()==Symbol()){

      OOP_Buy_NeSel = NormalizeDouble( OrderOpenPrice() + D_ONO *Point,Digits); 

      Need_Buy = Opened_Sel * OrdersNeed_Multi;

      for( p=Need_Buy ; p>0 ; p-- ){// ?
        if(IsTradeAllowed()==true)TI_NeBuy = OrderSend(Symbol(),OP_BUYSTOP,Lots,OOP_Buy_NeSel,Slippage,SL_FiBuy,TP_FiBuy,NULL,MN_NeBuy,0,Blue);
        if(IsTradeContextBusy()==true)Sleep(slMS);
        Opened_Sel++;} } } }// Nach OC3 noch kein NextBuy-by-NextSel offen.
//=============================================================================================================
//  ( O C 3 )   O P E N   M O R E   N E X T B U Y   B Y   N E X T S E L
//=============================================================================================================
//  ...wenn nach OC3 doch NextSel-by-NextBuy offen ist...
    if( ne_SH==true ){

//    OOP für NextBuy-by-NextSel berechnen:
      if(OrderSelect(TI_NeSel,SELECT_BY_TICKET)){
      if(OrderSymbol()==Symbol()){
      
      OOP_Buy_NeSel = NormalizeDouble( OrderOpenPrice() + D_ONO *Point,Digits);
        
      Need_Buy = Opened_Sel * OrdersNeed_Multi;

      for( q=Need_Buy ; q>0 ; q-- ){// ?
        if(IsTradeAllowed()==true)TI_NeBuy = OrderSend(Symbol(),OP_BUYSTOP,Lots,OOP_Buy_NeSel,Slippage,SL_FiBuy,TP_FiBuy,NULL,MN_NeBuy,0,Blue);
        if(IsTradeContextBusy()==true)Sleep(slMS);
        Opened_Sel++;} } } }// Nach OC3 doch NextBuy-by-NextSel offen.
//-----------------------------------------------------------------------------------------------------------*/
  }// NextSel-by-FirstBuy offen
//-----------------------------------------------------------------------------------------------------------*/
}// Nach OC2 nur FirstSel und FirstBuy offen.
//=============================================================================================================
// D E L E T E   A L L   P E N D I N G   O R D E R S
//=============================================================================================================
fi_SH=false;
fi_LO=false;
for(r=OrdersTotal()-1;r>=0;r--){
  if(OrderSelect(r,SELECT_BY_POS)){
    if(OrderSymbol()==Symbol()){
      if(OrderMagicNumber()==MN_FiSel)fi_SH=true;
      if(OrderMagicNumber()==MN_FiBuy)fi_LO=true;}}}

if( fi_SH==false && fi_LO==false ){

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

  if(
      ( OrderMagicNumber()==MN_Sel_FiBuy&&OrderType()==OP_SELLSTOP )
    ||( OrderMagicNumber()==MN_Buy_FiSel&&OrderType()==OP_BUYSTOP  )
    ||( OrderMagicNumber()==MN_NeSel&&OrderType()==OP_SELLSTOP )
    ||( OrderMagicNumber()==MN_NeBuy&&OrderType()==OP_BUYSTOP  )
    ){
        if(IsTradeAllowed()==true)OD=OrderDelete(OrderTicket(),clrRed);
        if(IsTradeContextBusy()==true)Sleep(slMS);} } } } }// Bei DeleteAll kein FirstBuy und kein FirstSel offen.
//============================================================================================================
// E A   F U N K T I O N E N   B E E N D E N
//=============================================================================================================
 
  1. Wenn ein Programm nicht tut, was es soll, ist der Debugger das Instrument der Wahl. Damit können die Variablenwerte kontrolliert werden, die zum Fehlverhalten führen.
  2. Vielleicht fehlt eine boolesche Variable, die abhängig von der Zeitspanne (Kursabstand,...?) der letzten Eröffnung, eione neue Eröffnung zulässt oder nicht.
 

Hallo.

Anscheinend hats irgendwas mit den eigenen Zählern zu tun. Das Öffnen der 1. Sell- und der 1. Buy-Order läuft anscheinend korrekt.

Aber irgendwann danach scheinen die eigenen Zähler komplett rum zu spinnen. Die haben mal im Backtest mit Print Werte angezeigt, die einfach absolut nicht stimmen können. Ein opened-Zähler war irgendwie bei 130, dabei wurden bis dahin 2, maximal 6 Orders geöffnet. Das muss nen großer Bug in MQL4 sein, oder der Fehler ist so merkwürdig, dass er nicht zu finden ist.

Kompletter Code ist im Anhang.

Irgendwo ab hier scheinen die eigenen Zähler überhaupt nicht mehr funktionieren. Hab bestimmt Alles 20mal komplett umgeschrieben, der Fehler, dass er irgendwo ab diesem Code viel zu viele Orders öffnet, tritt immer wieder auf, egal wie man den ganzen Kram schreibt.
//=============================================================================================================
// ( O S )   O P E N   N E X T   O R D E R S
//=============================================================================================================
// Wenn nach OS FirstSel und FirstBuy offen sind...
if( fiLO==true && fiSH==true ){
//=============================================================================================================
// O P E N   N E X T   S E L
//=============================================================================================================

//...wenn nach OS noch kein NextBuy offen ist...
  if( neLO==false ){// ?
  
  

//  ...OOP für NextSel-by-FirstBuy berechnen:
    if(OrderSelect(TI_FiBuy,SELECT_BY_TICKET)){
    if(OrderType()==OP_BUY){
    if(OrderSymbol()==Symbol()){

      OOP_Sel_FiBuy = NormalizeDouble( OrderOpenPrice() - D_ONO *Point,Digits);
      
      if( OOP_Sel_FiBuy > OrderStopLoss() ){

          for( Need_Sel ; Need_Sel>0 ; Need_Sel-- ){// ?
            if(IsTradeAllowed()==true)TI_NeSel = OrderSend(Symbol(),OP_SELLSTOP,Lots,OOP_Sel_FiBuy,Slippage,SL_FiSel,TP_FiSel,NULL,MN_NeSel,NULL,Blue);
            while(IsTradeContextBusy()==true)Sleep(slMS);
            if( TI_NeSel != -1 )Opened_Sel++;
          
} } } } } }// Nach OS kein NextBuy offen.

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

//...wenn nach OS doch NextBuy offen ist...
  if( neLO==true ){



//  ...OOP für NextSel-by-NextBuy berechnen:
    if(OrderSelect(TI_NeBuy,SELECT_BY_TICKET)){
    if(OrderType()==OP_BUY){
    if(OrderSymbol()==Symbol()){

      OOP_Sel_NeBuy = NormalizeDouble( OrderOpenPrice() - D_ONO *Point,Digits);
      
      if( OOP_Sel_NeBuy > OrderStopLoss() ){

        Need_Sel = Opened_Buy * OrdersNeed_Multi;
        
          for( Need_Sel ; Need_Sel>0 ; Need_Sel-- ){// ?
            if(IsTradeAllowed()==true)TI_NeSel = OrderSend(Symbol(),OP_SELLSTOP,Lots,OOP_Sel_NeBuy,Slippage,SL_FiSel,TP_FiSel,NULL,MN_NeSel,NULL,Blue);
            while(IsTradeContextBusy()==true)Sleep(slMS);
            if( TI_NeSel != -1 )Opened_Sel++;

  } } } } } }// Nach OS doch NextBuy offen.

//=============================================================================================================
// O P E N   N E X T   B U Y 
//=============================================================================================================

//Wenn nach OS noch kein NextSel offen ist...
  if( neSH==false ){



//  ...OOP für NextBuy-by-FirstSel berechnen:
    if(OrderSelect(TI_FiSel,SELECT_BY_TICKET)){
    if(OrderType()==OP_SELL){
    if(OrderSymbol()==Symbol()){

      OOP_Buy_FiSel = NormalizeDouble( OrderOpenPrice() + D_ONO *Point,Digits);
      
      if( OOP_Buy_FiSel < OrderStopLoss() ){


          for( Need_Buy ; Need_Buy>0 ; Need_Buy-- ){// ?
            if(IsTradeAllowed()==true)TI_NeBuy = OrderSend(Symbol(),OP_BUYSTOP,Lots,OOP_Buy_FiSel,Slippage,SL_FiBuy,TP_FiBuy,NULL,MN_NeBuy,NULL,Blue);
            while(IsTradeContextBusy()==true)Sleep(slMS);
            if( TI_NeBuy != -1 )Opened_Buy++;
          
  } } } } } }// Nach OS kein NextSel offen.

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

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

//  ...OOP für NextBuy-by-NextSel berechnen:
    if(OrderSelect(TI_NeSel,SELECT_BY_TICKET)){
    if(OrderType()==OP_SELL){
    if(OrderSymbol()==Symbol()){
    
    
      OOP_Buy_NeSel = NormalizeDouble( OrderOpenPrice() + D_ONO *Point,Digits);
      
      if( OOP_Buy_NeSel < OrderStopLoss() ){
      
      
        Need_Buy = Opened_Sel * OrdersNeed_Multi;      


          for( Need_Buy ; Need_Buy>0 ; Need_Buy-- ){// ?
            if(IsTradeAllowed()==true)TI_NeBuy = OrderSend(Symbol(),OP_BUYSTOP,Lots,OOP_Buy_NeSel,Slippage,SL_FiBuy,TP_FiBuy,NULL,MN_NeBuy,NULL,Blue);
            while(IsTradeContextBusy()==true)Sleep(slMS);
            if( TI_NeBuy != -1 )Opened_Buy++;
          
  } } } } } }// Nach OS kein NextSel offen.
//-----------------------------------------------------------------------------------------------------------*/
}// Nach OS1 FirstSel & FirstBuy offen
//=============================================================================================================
// D E L E T E   A L L   P E N D I N G   O R D E R S
//=============================================================================================================}// Nach OS FirstSel und FirstBuy offen.
if( fiSH==false && fiLO==false ){

  if( neSH==true || neLO==true ){

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

      if(

          (OrderMagicNumber()==MN_NeBuy&&OrderType()==OP_SELLSTOP)
        ||(OrderMagicNumber()==MN_NeSel&&OrderType()==OP_BUYSTOP )

        ){

           if(IsTradeAllowed())OD=OrderDelete(OrderTicket(),Red);
           while(IsTradeContextBusy())Sleep(slMS);} } } } } }// Bei DeleteAll kein FirstBuy und kein FirstSel offen.
//============================================================================================================
// E A   F U N K T I O N E N   B E E N D E N
//=============================================================================================================
}// void OnTick()
Dateien:
 

Dann verwende den Debugger immer bevor der Zählerwert sich ändert.

Man kann den Halt ja auch in einem if(){ .. } 'verstecken', sodass angehalten wird wenn...

Wenn das (debuggen mit hist. Daten im MT4 nicht geht) muss nicht nur der Zählerwert ausgedruckt werden, sondern auch die Umstände und Variablenwerte, die zur Erhöhung führen.

 

Das Problem kenne ich ... nur meistens tut der Automat genau das, was man ihm sagt. Also hast Du ihm was falsches erzählt ;).

Können den Quellcode gerne mal per Skype durchgehen, wenn Du magst. Meld Dich dazu einfach.

 

Skype hab ich nicht und auch keine Ahnung davon.

Werd morgen oder vielleicht heute noch mal den ganzen Code posten und versuchen, ihn genau zu erklären.


Vermute inzwischen, dass...

1.

irgendwelche Orders sich gegenseitig im Weg sind...


2.

...oder irgendwelche Codes öfter als sie sollen ausgeführt werden, weil einige Orders mehrmals mit OrderSelect() ausgewählt werden.

Im Anhang noch mal die Quell-Dateie(n). In einer Vers. wird mit extra bools geprüft, was für Orders offen sind. In der Anderen hab ich versucht, dass nur mit OrderSelect(... , SELECT_BY_TICKET) zu prüfen. In beiden Vers. werden viel mehr Orders geöffnet, als eigentlich sollten. Die 4 eigenen Zähler spinnen nach dem Öffnen der 1.Sell- und der 1.Buy-Order nur noch total rum.

Dateien:
 

Wollte eben den Code genauer erklären, bin aber irgendwie auf nen falschen Knopf gekommen.

So viel zu erklären gibts aber eigentlich nicht. Wenns irgendwelche Fragen zum Code gibt, dann immer raus damit.

Irgendwo ab hier scheinen die eigenen Zähler bloß noch zu spinnen. Ich hab keine Ahnung wieso. Vielleicht ist aber davor auch schon was falsch.

// Wenn nach OS FirstSel und FirstBuy offen sind...
if( fiLO==true && fiSH==true ){
//=============================================================================================================
// O P E N   N E X T   S E L
//=============================================================================================================

//...wenn nach OS noch kein NextBuy offen ist...
  if( neLO==false ){// ?

//  ...OOP für NextSel-by-FirstBuy berechnen:
    if(OrderSelect(TI_FiBuy,SELECT_BY_TICKET)){
    if(OrderType()==OP_BUY){
    if(OrderSymbol()==Symbol()){

      OOP_Sel_FiBuy = NormalizeDouble( OrderOpenPrice() - D_ONO *Point,Digits);
      
      if( OOP_Sel_FiBuy > OrderStopLoss() ){

        for( Need_Sel ; Need_Sel>0 ; Need_Sel-- ){// ?
          if(IsTradeAllowed()==true)TI_NeSel = OrderSend(Symbol(),OP_SELLSTOP,Lots,OOP_Sel_FiBuy,Slippage,SL_FiSel,TP_FiSel,NULL,MN_NeSel,NULL,Blue);
          while(IsTradeContextBusy()==true)Sleep(slMS);
          if( TI_NeSel != -1 )Opened_Sel++;
          
} } } } } }// Nach OS kein NextBuy offen.

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

//...wenn nach OS doch NextBuy offen ist...
  if( neLO==true ){

//  ...OOP für NextSel-by-NextBuy berechnen:
    if(OrderSelect(TI_NeBuy,SELECT_BY_TICKET)){
    if(OrderType()==OP_BUY){
    if(OrderSymbol()==Symbol()){

      OOP_Sel_NeBuy = NormalizeDouble( OrderOpenPrice() - D_ONO *Point,Digits);
      
      if( OOP_Sel_NeBuy > OrderStopLoss() ){

        Need_Sel = Opened_Buy * OrdersNeed_Multi;
        
          for( Need_Sel ; Need_Sel>0 ; Need_Sel-- ){// ?
            if(IsTradeAllowed()==true)TI_NeSel = OrderSend(Symbol(),OP_SELLSTOP,Lots,OOP_Sel_NeBuy,Slippage,SL_FiSel,TP_FiSel,NULL,MN_NeSel,NULL,Blue);
            while(IsTradeContextBusy()==true)Sleep(slMS);
            if( TI_NeSel != -1 )Opened_Sel++;

  } } } } } }// Nach OS doch NextBuy offen.

//=============================================================================================================
// O P E N   N E X T   B U Y 
//=============================================================================================================

//Wenn nach OS noch kein NextSel offen ist...
  if( neSH==false ){

//  ...OOP für NextBuy-by-FirstSel berechnen:
    if(OrderSelect(TI_FiSel,SELECT_BY_TICKET)){
    if(OrderType()==OP_SELL){
    if(OrderSymbol()==Symbol()){

      OOP_Buy_FiSel = NormalizeDouble( OrderOpenPrice() + D_ONO *Point,Digits);
      
      if( OOP_Buy_FiSel < OrderStopLoss() ){

        for( Need_Buy ; Need_Buy>0 ; Need_Buy-- ){// ?
          if(IsTradeAllowed()==true)TI_NeBuy = OrderSend(Symbol(),OP_BUYSTOP,Lots,OOP_Buy_FiSel,Slippage,SL_FiBuy,TP_FiBuy,NULL,MN_NeBuy,NULL,Blue);
          while(IsTradeContextBusy()==true)Sleep(slMS);
          if( TI_NeBuy != -1 )Opened_Buy++;
          
  } } } } } }// Nach OS kein NextSel offen.

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

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

//  ...OOP für NextBuy-by-NextSel berechnen:
    if(OrderSelect(TI_NeSel,SELECT_BY_TICKET)){
    if(OrderType()==OP_SELL){
    if(OrderSymbol()==Symbol()){

      OOP_Buy_NeSel = NormalizeDouble( OrderOpenPrice() + D_ONO *Point,Digits);
      
      if( OOP_Buy_NeSel < OrderStopLoss() ){
      
        Need_Buy = Opened_Sel * OrdersNeed_Multi;      

          for( Need_Buy ; Need_Buy>0 ; Need_Buy-- ){// ?
            if(IsTradeAllowed()==true)TI_NeBuy = OrderSend(Symbol(),OP_BUYSTOP,Lots,OOP_Buy_NeSel,Slippage,SL_FiBuy,TP_FiBuy,NULL,MN_NeBuy,NULL,Blue);
            while(IsTradeContextBusy()==true)Sleep(slMS);
            if( TI_NeBuy != -1 )Opened_Buy++;
          
  } } } } } }// Nach OS kein NextSel offen.
//-----------------------------------------------------------------------------------------------------------*/
}// Nach OS1 FirstSel & FirstBuy offen
//=============================================================================================================
// D E L E T E   A L L   P E N D I N G   O R D E R S
//=============================================================================================================}// Nach OS FirstSel und FirstBuy offen.
if( fiSH==false && fiLO==false ){

  if( neSH==true || neLO==true ){

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

      if(

          (OrderMagicNumber()==MN_NeBuy&&OrderType()==OP_SELLSTOP)
        ||(OrderMagicNumber()==MN_NeSel&&OrderType()==OP_BUYSTOP )

        ){

           if(IsTradeAllowed())OD=OrderDelete(OrderTicket(),Red);
           while(IsTradeContextBusy())Sleep(slMS);} } } } } }// Bei DeleteAll kein FirstBuy und kein FirstSel offen.
//============================================================================================================
// E A   F U N K T I O N E N   B E E N D E N
//=============================================================================================================
}// 
Dateien:
 
Geh mit dem Debugger durch den Code und setz einen Haltepunkt immer, wenn der Zähler geändert wird ...
 

Wie ist das eigentlich mit dem Managen von Orders, wenn gleichzeitg mehrere Sell- und Buy-Orders offen sind? Bzw. wenn allgemein mehrere Orders mit dem selben EA im selben Symbol() offen sind. Geht das so oder muss man das irgendwie anders machen?

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

Wie ist das eigentlich mit dem Managen von Orders, wenn gleichzeitg mehrere Sell- und Buy-Orders offen sind? Bzw. wenn allgemein mehrere Orders mit dem selben EA im selben Symbol() offen sind. Geht das so oder muss man das irgendwie anders machen?

Wie ist das eigentlich mit dem Managen von Forumsbeiträgen(Antworten).

Kann man die ignorieren und so auf das Expertenwissen pfeifen?

 
ScalpXpert:

Geht das so oder muss man das irgendwie anders machen?

Geht anders. Frage ist ja auch: was verstehst Du unter "managen".

Mein Angebot der Hilfe per Skype steht noch. Für hier ist mir der Quelltext einfach zu lang ;).

Grund der Beschwerde: