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)
-   -   Öffne neue Order gleich nachdem letzte Oder ausgestoppt wurde (http://www.expert-advisor.com/forum/showthread.php?t=4326)

saro2018 20.06.15 15:09

Öffne neue Order gleich nachdem letzte Oder ausgestoppt wurde
 
Hallo alle zusammen,

Ich habe mal eine Frage.

Ich möchte eine Marktorder sofort eröffnen, wenn die letzte Order in den Stopp Loss gerannt ist. Wie kann man das mit einbinden? Ich habe meine gewöhnlichen Marktorder Konditionen. Wenn eines der Order, die per Bedingung eröffnet wurden in den Stopp geht soll eine Gegenposition sofort eröffnet werden. Der Stopp soll der gleiche wie bei der letzten Order sein und der Take Profit soll die Pips der ausgestoppten Position plus XPips haben.

Kann mir jemand bei meiner Frage behilflich sein?

Vielen Dank im Vorraus :)

Aron

pako 20.06.15 19:12

Zitat:

Zitat von saro2018 (Beitrag 30163)
Ich möchte eine Marktorder sofort eröffnen, wenn die letzte Order in den Stopp Loss gerannt ist.


wenn die letzte Order in den Stopp Loss gerannt ist.
Code:

if(OrderClosePrice()==OrderStopLoss())

yytrader 20.06.15 21:17

Hallo pako,

das funktioniert nur, wenn es kein Slippage beim Schliessen der Order gab.

Gruss

yytrader

pako 20.06.15 22:40

Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von yytrader (Beitrag 30169)
Hallo pako,

das funktioniert nur, wenn es kein Slippage beim Schliessen der Order gab.

Gruss

yytrader

das funktioniert immer

Slippage in OrdersHistoryTotal():confused::eek:

script

saro2018 20.06.15 23:30

Okay schon mal vielen Dank, aber wie bette ich diesen Code in meinem EA ein, muss dieser Befehl direkt unter die Long bzw. Short Order Ausführung zu stehen haben oder wie muss ich das einbetten?


Danke schonmal im Vorraus :)

saro2018 21.06.15 00:13

Zitat:

Zitat von saro2018 (Beitrag 30173)
Okay schon mal vielen Dank, aber wie bette ich diesen Code in meinem EA ein, muss dieser Befehl direkt unter die Long bzw. Short Order Ausführung zu stehen haben oder wie muss ich das einbetten?


Danke schonmal im Vorraus :)

Habe deinen Code bei mir in die Bedingung mit eingefügt, allerdings ist dort wahrscheinlich noch ein Fehler.
Das ist der Teil, der nicht so funktioniert:
Code:

//check for long position
if (iOpen(NULL,0,0) < ma  && iClose(NULL,0,0) > ma)
  {
        RefreshRates();                        // Refresh rates
           
        SL=Ask - main_sl;    // Calculating SL of opened
        TP=Ask + main_tp;
       
      ticket=OrderSend(Symb,OP_BUY,Lts,Ask,2,SL,TP,NULL,123456); 
      if(ticket>0)
        {
        if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
        }
        else Print("Error opening SELL order : ",GetLastError());
      if(OrderClosePrice()==OrderStopLoss())
  {
    ticket=OrderSend(Symb,OP_SELL,Lts,Bid,2,5,5,NULL,123456);
   
    }       
       
        return(0);
        }


traderdoc 21.06.15 00:16

Zitat:

Zitat von yytrader (Beitrag 30169)
Hallo pako,

das funktioniert nur, wenn es kein Slippage beim Schliessen der Order gab.

Gruss

yytrader

Das habe ich ihm auch schon einmal geschrieben.

pako 21.06.15 00:46

Zitat:

Zitat von traderdoc (Beitrag 30176)
Das habe ich ihm auch schon einmal geschrieben.

Nachweis fehlt

saro2018 21.06.15 14:28

Also keiner eine Lösung dafür?

Ist es den möglich eine Bedingung festzulegen wenn eine Order in den Stopp-loss Bzw. in den Take Profit gelaufen ist?

Gruß

Aron

traderdoc 21.06.15 14:39

Für eine BuyOrder:

if(OrderClosePrice()<=OrderStopLoss())

für eine SellOrder:

if(OrderClosePrice()>=OrderStopLoss())

oder noch sicherer im OrderComment() der Order der Historie nach den Worten sl oder tp suchen.

traderdoc

saro2018 21.06.15 15:04

Zitat:

Zitat von traderdoc (Beitrag 30183)
Für eine BuyOrder:

if(OrderClosePrice()<=OrderStopLoss())

für eine SellOrder:

if(OrderClosePrice()>=OrderStopLoss())

oder noch sicherer im OrderComment() der Order der Historie nach den Worten sl oder tp suchen.

traderdoc

Alles klar danke dir :)

soweit bin ich nun auch gekommen nur die Sache ist die, an welcher stelle soll der Code eingebettet werden das ist meine Hauptproblem, weil er muss ja auch darauf reagieren. Innerhalb der Bedingungs Loop oder wo anders? Sprich wie verknüpfe ich die Bedinung.

Gruß

Aron

saro2018 21.06.15 17:04

Okay ich habe mal eine Sache programmiert. Sie soll checken ob die letzte Order ein Profit war oder nicht. Falls das der Fall ist, soll sie in die Condition Loop wieder rein, falls sie ein Loss war soll sie unten den Befehl ausführen (eine Order eröffnen, Gegenposition)
Der Code sieht die wie folgt aus:
Code:

double mymagicnumber = 123456;

double closedProfit = 0;


int hstTotal = OrdersHistoryTotal();
for(int i=0;i<hstTotal;i++)
{ OrderSelect(i, SELECT_BY_POS, MODE_HISTORY );
if ( OrderSymbol()==Symbol() && ( (OrderMagicNumber() == mymagicnumber)))
{closedProfit = closedProfit + OrderProfit();
}
} if (closedProfit>=0)
//[...my conditions]
//[am ende der Loop]
if (closedProfit<0)
{
if(total<1)
for(i=0;i<hstTotal;i++)
{  OrderSelect(i, SELECT_BY_POS, MODE_HISTORY );
if ( OrderType()==OP_BUY && ( (OrderMagicNumber() == mymagicnumber)))
{OrderSend(Symbol(),OP_SELL,Lots,Bid,2,StopLoss,TakeProfit,NULL,mymagicnumber);
}
if ( OrderType()==OP_SELL && ( (OrderMagicNumber() == mymagicnumber)))
{OrderSend(Symbol(),OP_BUY,Lots,Ask,2,StopLoss,TakeProfit,NULL,mymagicnumber);
}
} }

return(0);
      }

Da müsste ein kleiner Logikfehler drin sein.

Gruß Aron

saro2018 22.06.15 15:24

Zitat:

Zitat von saro2018 (Beitrag 30185)
Okay ich habe mal eine Sache programmiert. Sie soll checken ob die letzte Order ein Profit war oder nicht. Falls das der Fall ist, soll sie in die Condition Loop wieder rein, falls sie ein Loss war soll sie unten den Befehl ausführen (eine Order eröffnen, Gegenposition)
Der Code sieht die wie folgt aus:
Code:

double mymagicnumber = 123456;

double closedProfit = 0;


int hstTotal = OrdersHistoryTotal();
for(int i=0;i<hstTotal;i++)
{ OrderSelect(i, SELECT_BY_POS, MODE_HISTORY );
if ( OrderSymbol()==Symbol() && ( (OrderMagicNumber() == mymagicnumber)))
{closedProfit = closedProfit + OrderProfit();
}
} if (closedProfit>=0)
//[...my conditions]
//[am ende der Loop]
if (closedProfit<0)
{
if(total<1)
for(i=0;i<hstTotal;i++)
{  OrderSelect(i, SELECT_BY_POS, MODE_HISTORY );
if ( OrderType()==OP_BUY && ( (OrderMagicNumber() == mymagicnumber)))
{OrderSend(Symbol(),OP_SELL,Lots,Bid,2,StopLoss,TakeProfit,NULL,mymagicnumber);
}
if ( OrderType()==OP_SELL && ( (OrderMagicNumber() == mymagicnumber)))
{OrderSend(Symbol(),OP_BUY,Lots,Ask,2,StopLoss,TakeProfit,NULL,mymagicnumber);
}
} }

return(0);
      }

Da müsste ein kleiner Logikfehler drin sein.

Gruß Aron




Keiner einen Ansatz für mein Problem?

Gruß

Aron

traderdoc 22.06.15 22:56

Code:

int ticket;
double closedProfit = 0;
int hstTotal = OrdersHistoryTotal();

for(int i = 0; i < hstTotal; i++) {
  if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == mymagicnumber) {
        closedProfit = closedProfit + OrderProfit();
      }
  }
}

if (closedProfit>=0) {
  //[...my conditions]
  //[am ende der Loop]
}

if (closedProfit < 0) {
  if(total < 1) {          //was soll total sein???
      for(i = 0; i < hstTotal; i++) { 
        if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) {
            if (OrderType() == OP_BUY && OrderMagicNumber() == mymagicnumber){
              ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 2, StopLoss, TakeProfit, NULL, mymagicnumber);
            }
            if (OrderType() == OP_SELL && OrderMagicNumber() == mymagicnumber{
              ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 2, StopLoss, TakeProfit, NULL, mymagicnumber);
            }
        }
      }
  }
}

So, habe mal den Code etwas geordnet. Das solltest Du Dir von vorn herein angewöhnen.
Die Logik im unteren Teil erschließt sich mir zwar nicht, aber Du wirst schon Deine Gründe haben.
Ansonsten solltest Du nochmals ganz knapp darlegen, was genau!! gemacht werden soll.

traderdoc

saro2018 22.06.15 23:09

Zitat:

Zitat von traderdoc (Beitrag 30218)
Code:

int ticket;
double closedProfit = 0;
int hstTotal = OrdersHistoryTotal();

for(int i = 0; i < hstTotal; i++) {
  if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == mymagicnumber) {
        closedProfit = closedProfit + OrderProfit();
      }
  }
}

if (closedProfit>=0) {
  //[...my conditions]
  //[am ende der Loop]
}

if (closedProfit < 0) {
  if(total < 1) {          //was soll total sein???
      for(i = 0; i < hstTotal; i++) { 
        if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) {
            if (OrderType() == OP_BUY && OrderMagicNumber() == mymagicnumber){
              ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 2, StopLoss, TakeProfit, NULL, mymagicnumber);
            }
            if (OrderType() == OP_SELL && OrderMagicNumber() == mymagicnumber{
              ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 2, StopLoss, TakeProfit, NULL, mymagicnumber);
            }
        }
      }
  }
}

So, habe mal den Code etwas geordnet. Das solltest Du Dir von vorn herein angewöhnen.
Die Logik im unteren Teil erschließt sich mir zwar nicht, aber Du wirst schon Deine Gründe haben.
Ansonsten solltest Du nochmals ganz knapp darlegen, was genau!! gemacht werden soll.

traderdoc

Vielen Dank, für die Antwort. Also im Allgemeinen möchte ich, dass der EA checken soll, ob der letzte Trade ein Profit oder ein Loss ist.
Wenn der Trade ein Loss ist (wie unten), dann soll er eine Position sofort in Gegenrichtung eröffnen. Mit total ist gemeint, dass er zudem checken soll, ob sich schon eine Order im Markt befindet. Wenn dies der Fall ist, soll er keine neue eröffnen. Also immer nur eine Positition im Markt.

Gruß Aron

traderdoc 22.06.15 23:18

Code:

int ticket;
double closedProfit;
int lastorder;
int hstTotal = OrdersHistoryTotal();

for(int i = hstTotal -1; i >= 0; i--) {
  if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == mymagicnumber) {
        closedProfit = OrderProfit();
        lastorder = OrderType();
        break;
      }
  }
}

if (closedProfit>=0) {
  //[...my conditions]
  //[am ende der Loop]
}

if (closedProfit < 0) {
  if(total < 1) {          //was soll total sein???
      if (lastorder == 0) {
        ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 2, StopLoss, TakeProfit, NULL, mymagicnumber);
      }
      if (lastorder == 1) {
        ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 2, StopLoss, TakeProfit, NULL, mymagicnumber);
      }
  }
}

Auf die Schnelle hingeschrieben, ohne zu testen.

traderdoc

saro2018 23.06.15 19:11

Zitat:

Zitat von traderdoc (Beitrag 30223)
Code:

int ticket;
double closedProfit;
int lastorder;
int hstTotal = OrdersHistoryTotal();

for(int i = hstTotal -1; i >= 0; i--) {
  if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == mymagicnumber) {
        closedProfit = OrderProfit();
        lastorder = OrderType();
        break;
      }
  }
}

if (closedProfit>=0) {
  //[...my conditions]
  //[am ende der Loop]
}

if (closedProfit < 0) {
  if(total < 1) {          //was soll total sein???
      if (lastorder == 0) {
        ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 2, StopLoss, TakeProfit, NULL, mymagicnumber);
      }
      if (lastorder == 1) {
        ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 2, StopLoss, TakeProfit, NULL, mymagicnumber);
      }
  }
}

Auf die Schnelle hingeschrieben, ohne zu testen.

traderdoc

Hallo, vielen Dank für deine schnelle Antwort. Ich soeben den von dir umgeänderten Code bei mir im EA eingefügt. Allerdings ist das Problem immernoch vorhanden. Der EA verkauft bzw. kauft leider immernoch nicht sobald ein Trade mit Verlust geschlossen wurde. Woran könnte das liegen?

Gruß Aron

Hier nochmal als Anhang der Teil meines EAs, wo die Bedingung drin stehen:
Code:


 
double mymagicnumber = 123456;


double closedProfit;
int lastorder;
int hstTotal = OrdersHistoryTotal();

for(int i = hstTotal -1; i >= 0; i--) {
  if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == mymagicnumber) {
        closedProfit = OrderProfit();
        lastorder = OrderType();
        break;
      }
  }
}
 
//---- detect trading signal ---------------------------------------------------------------+
double close = NormalizeDouble(iClose(NULL,0,0),digits);
double open  = NormalizeDouble(iOpen(NULL,0,0),digits);
double o  =  NormalizeDouble(Upper,digits);
double u =  NormalizeDouble(Lower,digits);

total=OrdersTotal();
if(total<1)
{

static  datetime    tradingAllowed;
int newCount = HistoryTotal();  static  int prevCount;
if (newCount != prevCount){                prevCount = newCount;
    datetime lastClose;
    for(int pos=newCount-1; pos >= 1; pos--) if (
        OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY) 
    &&  OrderCloseTime()    > lastClose             
    &&  OrderTicket()  == ticket         
    &&  OrderSymbol()      == Symbol()               
    &&  OrderType()        <= OP_SELL){ 
        lastClose = OrderCloseTime();
    }
    datetime lastClosePlus24Hrs = lastClose + 2* 3600;
    tradingAllowed = lastClosePlus24Hrs;
}
if (TimeCurrent() <= tradingAllowed) return(0);


 if(AccountFreeMargin()<(1000*Lots))
 {Print("We have no money. Free Margin = ", AccountFreeMargin());
 return(0);
 }
 //check for long position
if (closedProfit>=0)

if (iOpen(NULL,0,0) > u && iClose(NULL,0,0) < u)
  {
        RefreshRates();                        // Refresh rates
     
        SL=Bid + main_sl;    // Calculating SL of opened
        TP=Bid - main_tp;  // Calculating TP of opened
       
        ticket=OrderSend(Symb,OP_SELL,Lts,Bid,2,SL,TP,NULL,123456);
        if(ticket>0)
        {
        if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
        }
        else Print("Error opening BUY order : ",GetLastError());
        return(0);
        }                          // Criterion for opening Sell

if (iOpen(NULL,0,0) < o  && iClose(NULL,0,0) > o)
  {
        RefreshRates();                        // Refresh rates
           
        SL=Ask - main_sl;    // Calculating SL of opened
        TP=Ask + main_tp;
       
      ticket=OrderSend(Symb,OP_BUY,Lts,Ask,2,SL,TP,NULL,123456); 
      if(ticket>0)
        {
        if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
        }
        else Print("Error opening SELL order : ",GetLastError());
        return(0);
        }
 }     

// Criterion for opening Sell

if (closedProfit < 0) {
  // if(total < 1) {          //was soll total sein???
      if (lastorder == 0) {
        ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 2, StopLoss, TakeProfit, NULL, mymagicnumber);
      }
      if (lastorder == 1) {
        ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 2, StopLoss, TakeProfit, NULL, mymagicnumber);
      }
  }

 
       
       

return(0);
      }






int maxDuration = 20 * 60; // 20 minutes
for(int posi = OrdersTotal()-1; posi >= 0 ; posi--) if (
    OrderSelect(posi, SELECT_BY_POS)            // Only my orders w/
&&  OrderMagicNumber() == 123456        // my magic number
&&  OrderSymbol()      == Symbol() ){              // and period and symbol
    int duration = TimeCurrent() - OrderOpenTime();
    if (duration >= maxDuration)
    OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(),
                2 * my_point);   
}


return(0);
}


traderdoc 23.06.15 19:29

Das kann nicht der ganze Code sein, denn der wäre nur mit Fehlern compilierbar. (z.B. total nicht deklariert, Benutzung von return(0) ohne Einsprungpunkt). Entscheidend für die Lebensdauer der Variablen ist der Ort der Deklaration.

Desweiteren baue an markanten Stellen die Funktion
Print() ein. In der Klammer dann Ausdrücke, die angezeigt werden sollen, z.B. Variablen oder Ergebnisse von Berechnungen oder Rückgabewerte von Funktionen.
Zur reinen Verfolgung, wo der EA hinläuft, reicht es auch aus zu schreiben:
Print("T");
Erscheint dann das T im Reiter Journal oder ExpertAdvisor, dann weißt Du, dass er da lang gelaufen ist.
So kannst Du immer weiter einengen, bis Du die Stelle gefunden hast, an der es lag.

traderdoc

saro2018 23.06.15 19:50

Zitat:

Zitat von traderdoc (Beitrag 30233)
Das kann nicht der ganze Code sein, denn der wäre nur mit Fehlern compilierbar. (z.B. total nicht deklariert, Benutzung von return(0) ohne Einsprungpunkt). Entscheidend für die Lebensdauer der Variablen ist der Ort der Deklaration.

Desweiteren baue an markanten Stellen die Funktion
Print() ein. In der Klammer dann Ausdrücke, die angezeigt werden sollen, z.B. Variablen oder Ergebnisse von Berechnungen oder Rückgabewerte von Funktionen.
Zur reinen Verfolgung, wo der EA hinläuft, reicht es auch aus zu schreiben:
Print("T");
Erscheint dann das T im Reiter Journal oder ExpertAdvisor, dann weißt Du, dass er da lang gelaufen ist.
So kannst Du immer weiter einengen, bis Du die Stelle gefunden hast, an der es lag.

traderdoc

Vielen Dank schonmal, das ist nur ein Teil, oben im EA habe ich alles deklariert. Die Sache ist villeicht die Position des Codes im EA, die er wahrscheinlich nicht durchläuft, wie soll ich das einbauen mit dem Print? direkt da runter? dann print("T") zum Beispiel?


Hier der komplette EA (bis auf eine kleine Berechnung):
Code:

//--------------------------------------------------------------------
#property copyright "Copyright © 2015"
//--------------------------------------------------------------- 1 --


#define MAGICMA  16384


extern double StopLoss  =25;    // SL for an opened order
extern double TakeProfit =20;      // ТР for an opened order
extern double TrailingStop = 30;
extern double Lots      =0.1;    // Strictly set amount of lots
extern double Prots      =0.07;    // Percent of free margin
extern double Abweichung = 5;
extern int    DaysToLookBack = 15;
extern color  LineColor      = Black;
extern int    LineWidth      = 1;
extern int    LineStyle      = STYLE_DOT;
int  ShowComment    = TRUE;
extern string LineNameUpper  = "o";
extern string LineNameLower  = "u";


 
bool Work=true;                    // EA will work.
string Symb=Symbol();                      // Security name
//--------------------------------------------------------------- 2 --
//----- global variables ----------------------------------------------------------------------+
int    slippage;
int    digits, Total;
int  ticket, total, tip=-1;
double point;
int    my_digits;
double my_point;
int    pips_digits;
int    lots_digits;
double Min_Lot;
double Lot;

double maxlots, Free, One_Lot, Step, Lts, SL, TP,K;
string symbol;
double risk;
double maxSpreadWithCommission;
double rangeFilter;
bool  gotCommissionPointsFromTrade;
double commissionPoints;
double spreadHistory[30];
int    spreadHistoryCount = 0;
string objname_hline;
bool  is_testing;
double main_sl;
double main_tp;
double OP;
double main_be_profit;
double main_be_offset;
static int      account_number;
static bool    is_ok;
bool
  Ans  =false,                    // Server response after closing
  Cls_B=false,                    // Criterion for closing Buy
  Cls_S=false,                    // Criterion for closing Sell
  Opn_B=false,                    // Criterion for opening Buy
  Opn_S=false;                    // Criterion for opening Sell


int init()
{
            ArrayInitialize(spreadHistory,0.0);
            is_testing = IsTesting();
            symbol = Symbol();
            digits = Digits;
            point  = Point;
            ticket = OrderTicket();
            tip    = OrderType();
            Lot    = OrderLots();
            SL    =OrderStopLoss();
            TP    =OrderTakeProfit();
            Total =OrdersTotal();
    if(digits == 0)
    {
            my_point  = 1.0;
            my_digits = 0;
    }
  else
    {
      if(digits < 2)
        {
            my_point  = 0.1;
            my_digits = 1;
        }
      else
        {
        if(digits < 4)
          {
            my_point  = 0.01;
            my_digits = 2;
          }
        else
          {
            my_point  = 0.0001;
            my_digits = 4;
          }
        }
    }
  if(StringFind(symbol,"XAU") >= 0 || StringFind(symbol,"GOLD") >= 0)
    {
      my_point  = 0.1;
      my_digits = 1;
    }
  else
    {
      if(StringFind(symbol,"XAG") >= 0 || StringFind(symbol,"SILVER") >= 0)
        {
        my_point  = 0.01;
        my_digits = 2;
        }
    }
    pips_digits = digits - my_digits;
  double correction = MathPow(10,pips_digits);

 //  Lots = NormalizeDouble(Lots,lots_digits);

  main_sl = NormalizeDouble(my_point * StopLoss,digits);
  main_tp = NormalizeDouble(my_point * TakeProfit,digits);
  OP      = NormalizeDouble(my_point * Abweichung,digits);
 
 
return(0); 
}
//---------------------------------------------------------------------------------------------+
//---- deinit ---------------------------------------------------------------------------------+
//---------------------------------------------------------------------------------------------+
int deinit()
  {
  if(ShowComment) Comment("");
    if (ShowComment) Comment("");
  ObjectDelete(LineNameUpper);
  ObjectDelete(LineNameLower);
  ObjectDelete("ObjName33");
  ObjectDelete("ObjName213");
  return(0);
  }
 
//---------------------------------------------------------------------------------------------+
//---- start ----------------------------------------------------------------------------------+
//---------------------------------------------------------------------------------------------+
int start()
  {
 
//

[Berechnungen für die Upper und Lower Range (diese Funktioniert)]


 
  if (ObjectFind(LineNameUpper)<0) DrawLine(LineNameUpper, Upper); 
    else ObjectMove(LineNameUpper,0,TimeCurrent(),Upper);
  if (ObjectFind(LineNameLower)<0) DrawLine(LineNameLower, Lower);
    else ObjectMove(LineNameLower,0,TimeCurrent(),Lower);

 
  ObjectCreate("ObjName33", OBJ_TEXT, 0, TimeCurrent(),DoubleToStr(Upper,Digits));
  ObjectSetText("ObjName33","  o STB: "+DoubleToStr(Upper,Digits),10, "Verdana", DarkGray);
  ObjectSet("ObjName33", OBJPROP_CORNER, 0);
  ObjectSetInteger(0,"ObjName33",OBJPROP_ANCHOR,ANCHOR_LEFT);
 
  ObjectCreate("ObjName213", OBJ_TEXT, 0, TimeCurrent(),DoubleToStr(LowerDigits));
  ObjectSetText("ObjName213","  u STB: "+DoubleToStr(Lower,Digits),10, "Verdana", DarkGray);
  ObjectSet("ObjName213", OBJPROP_CORNER, 0);
  ObjectSetInteger(0,"ObjName213",OBJPROP_ANCHOR,ANCHOR_LEFT);
 
//--------------------------------------------------------------- 7 --
  // Order value
  RefreshRates();                              // Refresh rates
  Min_Lot=MarketInfo(NULL,MODE_MINLOT);        // Minimal number of lots 
  Free  =AccountFreeMargin();                // Free margin
  One_Lot=MarketInfo(NULL,MODE_MARGINREQUIRED);// Price of 1 lot
  Step  =MarketInfo(NULL,MODE_LOTSTEP);      // Step is changed
 
  if (Lots < 0)                                // If lots are set,
      Lts =Lots;                                // work with them
  else                                        // % of free margin
      Lts=MathFloor(Free*Prots/One_Lot/Step)*Step;// For opening
 
  if(Lts > Min_Lot) Lts=Min_Lot;              // Not less than minimal
  if (Lts*One_Lot > Free)                      // Lot larger than free margin
    {
      Alert(" Not enough money for ", Lts," lots");
      return(0);                                  // Exit start()
    }

 
 
 
 
 
 
 
 
double mymagicnumber = 123456;


double closedProfit;
int lastorder;
int hstTotal = OrdersHistoryTotal();

for(int i = hstTotal -1; i >= 0; i--) {
  if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == mymagicnumber) {
        closedProfit = OrderProfit();
        lastorder = OrderType();
        break;
      }
  }
}
 
//---- detect trading signal ---------------------------------------------------------------+
double close = NormalizeDouble(iClose(NULL,0,0),digits);
double open  = NormalizeDouble(iOpen(NULL,0,0),digits);
double o  =  NormalizeDouble(Upper,digits);
double u  =  NormalizeDouble(Lower,digits);

total=OrdersTotal();
if(total<1)
{

static  datetime    tradingAllowed;
int newCount = HistoryTotal();  static  int prevCount;
if (newCount != prevCount){                prevCount = newCount;
    datetime lastClose;
    for(int pos=newCount-1; pos >= 1; pos--) if (
        OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY)  // Only orders w/
    &&  OrderCloseTime()    > lastClose               
    &&  OrderTicket()  == ticket         
    &&  OrderSymbol()      == Symbol()               
    &&  OrderType()        <= OP_SELL){   
        lastClose = OrderCloseTime();
    }
    datetime lastClosePlus24Hrs = lastClose + 2* 3600;
    tradingAllowed = lastClosePlus24Hrs;
}
if (TimeCurrent() <= tradingAllowed) return(0);


 if(AccountFreeMargin()<(1000*Lots))
 {Print("We have no money. Free Margin = ", AccountFreeMargin());
 return(0);
 }
 //check for long position
if (closedProfit>=0)

if (iOpen(NULL,0,0) > u && iClose(NULL,0,0) < u)
  {
        RefreshRates();                        // Refresh rates
     
        SL=Bid + main_sl;    // Calculating SL of opened
        TP=Bid - main_tp;  // Calculating TP of opened
       
        ticket=OrderSend(Symb,OP_SELL,Lts,Bid,2,SL,TP,NULL,123456);
        if(ticket>0)
        {
        if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
        }
        else Print("Error opening BUY order : ",GetLastError());
        return(0);
        }                          // Criterion for opening Sell

if (iOpen(NULL,0,0) < o  && iClose(NULL,0,0) > o)
  {
        RefreshRates();                        // Refresh rates
           
        SL=Ask - main_sl;    // Calculating SL of opened
        TP=Ask + main_tp;
       
      ticket=OrderSend(Symb,OP_BUY,Lts,Ask,2,SL,TP,NULL,123456); 
      if(ticket>0)
        {
        if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
        }
        else Print("Error opening SELL order : ",GetLastError());
        return(0);
        }
 }     

                        // Criterion for opening Sell

if (closedProfit < 0) {
  // if(total < 1) {          //was soll total sein???
      if (lastorder == 0) {
        ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 2, StopLoss, TakeProfit, NULL, mymagicnumber);
      }
      if (lastorder == 1) {
        ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 2, StopLoss, TakeProfit, NULL, mymagicnumber);
      }
  }

 
       
       

return(0);
      }






int maxDuration = 20 * 60; // 20 minutes
for(int posi = OrdersTotal()-1; posi >= 0 ; posi--) if (
    OrderSelect(posi, SELECT_BY_POS)            // Only my orders w/
&&  OrderMagicNumber() == 123456        // my magic number
&&  OrderSymbol()      == Symbol() ){              // and period and symbol
    int duration = TimeCurrent() - OrderOpenTime();
    if (duration >= maxDuration)
    OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(),
                2 * my_point);   
}


















 



return(0);
}


int New_Stop(int Parametr)                      // Checking stop levels
  {
  int Min_Dist=MarketInfo(NULL,MODE_STOPLEVEL);// Minimal distance
  if (Parametr > Min_Dist)                    // If less than allowed
    {
      Parametr=Min_Dist;                        // Sett allowed
      Alert("Increased distance of stop level.");
    }
  return(Parametr);                            // Returning value
  }


void DrawLine(string LineName,double price1) {
 ObjectCreate(LineName,OBJ_TREND,0,TimeCurrent(),price1,Time[40],price1);
 ObjectSet(LineName,OBJPROP_COLOR,LineColor);
 ObjectSet(LineName,OBJPROP_WIDTH,LineWidth);
 ObjectSet(LineName,OBJPROP_STYLE,LineStyle);
 ObjectSet(LineName,OBJPROP_RAY_RIGHT, false);
 }


traderdoc 23.06.15 20:28

int lastorder; solltest Du mal gegen int lastorder = -1; ersetzen.
Daran liegt es aber nicht.

Du mußt Dir überlegen, wo der EA lang laufen soll un dan den Stellen, wo Du das kontrollieren willst, schreibst Du halt Print("T"); Sollten mehrere Stellen gleichzeitig kontrolliert werden dann Print("T1");, Print("T2"); usw.Damit kannst Du dann genau unterscheiden wo, und v.a. an der Reihenfolge der Prints, wann er im Verlaufe der Abarbeitung wo langgelaufen war.

Experimentiere doch einfach mit dem Print etwas.

traderdoc

saro2018 23.06.15 21:13

Zitat:

Zitat von traderdoc (Beitrag 30235)
int lastorder; solltest Du mal gegen int lastorder = -1; ersetzen.
Daran liegt es aber nicht.

Du mußt Dir überlegen, wo der EA lang laufen soll un dan den Stellen, wo Du das kontrollieren willst, schreibst Du halt Print("T"); Sollten mehrere Stellen gleichzeitig kontrolliert werden dann Print("T1");, Print("T2"); usw.Damit kannst Du dann genau unterscheiden wo, und v.a. an der Reihenfolge der Prints, wann er im Verlaufe der Abarbeitung wo langgelaufen war.

Experimentiere doch einfach mit dem Print etwas.

traderdoc

Danke erstmal, hat schonmal gut geholfen mit dem Print. Also der Fehler, den er mir rausgibt ist der folgende: "OrderSend error 130". Dieser erscheint sobald eine Order im Minus geschlossen wurde und er versucht in die Bedingung rein zu gehen, um eine Gegenposition aufzubauen. In diesem Fall habe ich das mit dem Print gemacht und er leitet mich zu deinem Code den du mir geschickt hast:
Code:

if (closedProfit < 0) {
    Print("T");
  // if(total < 1) {          //was soll total sein???
      if (lastorder == 0) {
        ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 2,STOPLOSS, TAKEPROFIT, NULL, mymagicnumber);
       
      }
      if (lastorder == 1) {
        ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 2, STOPLOSS, TAKEPROFIT, NULL, mymagicnumber);
      }
  }

Ich habe schon probiert, die Marketorder durch eine Pending zu verändern um den Markteinstieg zu verzögern, allerdings auch vergebens..

Gruß Aron

traderdoc 23.06.15 22:07

"OrderSend error 130"
bedeutet Invalid Stops, d.h. der Wert des StopLoss oder TakeProfit in der Funktion OrderSend() ist so falsch, dass der MT4 keine Order öffnen kann.

Also die Stops kontrollieren!

traderdoc

saro2018 24.06.15 00:20

Zitat:

Zitat von traderdoc (Beitrag 30239)
"OrderSend error 130"
bedeutet Invalid Stops, d.h. der Wert des StopLoss oder TakeProfit in der Funktion OrderSend() ist so falsch, dass der MT4 keine Order öffnen kann.

Also die Stops kontrollieren!

traderdoc

Ich habe mir gerade das noch einmal gründlich angeschaut, und den StopLoss und TakeProfit angepasst, allerdings gab er dann wieder den gleichen Fehler Code raus. Als ich daraufhin den gleichen Stop und Take Profit eingestellt habe, wie in meinen vorherigen Bedingungen hat er förmlich diese Bedingung ignoriert.

Er soll faktisch sofort eine Market Order eröffnen, sobald der vorherige Trade in den Stop gelaufen ist. Kann es vielleicht auch an der Verzögerung liegen, dass es dort Schwierigkeiten gibt? Also das eine sofortige Market Order nicht möglich ist zu dem gleichen Preis, wie der Stop der letzten Order war?
Kann der error 130 vielleicht noch etwas anderes bedeuten?

Gruß
Aron

traderdoc 24.06.15 09:02

if (closedProfit < 0) {
Print("T");
// if(total < 1) { //was soll total sein???
if (lastorder == 0) {
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 2,STOPLOSS, TAKEPROFIT, NULL, mymagicnumber);

}
if (lastorder == 1) {
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 2, STOPLOSS, TAKEPROFIT, NULL, mymagicnumber);
}
}

Laß Dir doch über Print() die Werte für StopLoss und TakeProfit ausdrucken, dann wirst Du sehen, dass die nicht stimmen.
Wenn ich das richtig überflogen habe, dann werden die beiden Werte oben aus den externen Variablen übernommen. Das geht natürlich nicht. In Deinen vorherigen OrderSend-Funktionen sind die SL und TP anscheinend ja richtig berechnet worden.

traderdoc

saro2018 24.06.15 13:38

Zitat:

Zitat von traderdoc (Beitrag 30242)
if (closedProfit < 0) {
Print("T");
// if(total < 1) { //was soll total sein???
if (lastorder == 0) {
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 2,STOPLOSS, TAKEPROFIT, NULL, mymagicnumber);

}
if (lastorder == 1) {
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 2, STOPLOSS, TAKEPROFIT, NULL, mymagicnumber);
}
}

Laß Dir doch über Print() die Werte für StopLoss und TakeProfit ausdrucken, dann wirst Du sehen, dass die nicht stimmen.
Wenn ich das richtig überflogen habe, dann werden die beiden Werte oben aus den externen Variablen übernommen. Das geht natürlich nicht. In Deinen vorherigen OrderSend-Funktionen sind die SL und TP anscheinend ja richtig berechnet worden.

traderdoc

Das könnte natürlich sein.. Wie kann ich über die Print() Funktion den StopLoss und TakeProfit ausdrucken?
Ich habe allerdings auch mal probiert einfach Werte einzusetzen eg. 20 für SL und 30 für TP, allerdings kommt dann immer noch der Fehler.
Ist das auch ein Fehler einfach Werte dafür einzusetzen?

Gruß
Aron

traderdoc 24.06.15 14:13

Zitat:

Zitat von saro2018 (Beitrag 30246)
Das könnte natürlich sein.. Wie kann ich über die Print() Funktion den StopLoss und TakeProfit ausdrucken?
Ich habe allerdings auch mal probiert einfach Werte einzusetzen eg. 20 für SL und 30 für TP, allerdings kommt dann immer noch der Fehler.
Ist das auch ein Fehler einfach Werte dafür einzusetzen?

Gruß
Aron

Das könnte nicht nur sein, sondern das ist es mit Sicherheit, weil Du setzt direkt die Pipwerte der Variablen StopLoss und TakeProfit ein!! Das geht natürlich nicht!
Print(StopLoss)!

Berechne doch einfach den zu setzenden StopLoss so, wie Du ihn auch weiter oben bei Dir im Programm schon berechnet hast!

traderdoc

pako 24.06.15 15:14

Zitat:

Zitat von saro2018 (Beitrag 30246)
Das könnte natürlich sein.. Wie kann ich über die Print() Funktion den StopLoss und TakeProfit ausdrucken?
Ich habe allerdings auch mal probiert einfach Werte einzusetzen eg. 20 für SL und 30 für TP, allerdings kommt dann immer noch der Fehler.
Ist das auch ein Fehler einfach Werte dafür einzusetzen?

Gruß
Aron

if (lastorder == 1)
{
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 2,NormalizeDouble(Ask - STOPLOSS*Point(),Digits()), NormalizeDouble(Ask + TAKEPROFIT*Point(),Digits()), NULL, mymagicnumber);
}

traderdoc 24.06.15 15:36

Zitat:

Zitat von pako (Beitrag 30250)
if (lastorder == 1)
{
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 2,NormalizeDouble(Ask - STOPLOSS*Point(),Digits()), NormalizeDouble(Ask + TAKEPROFIT*Point(),Digits()), NULL, mymagicnumber);
}

Nun lass ihn mal ein wenig mitmachen.

STOPLOSS*Point() und TAKEPROFIT*Point()
Außerdem wieder diese unsaubere Sache mit dem Ignorieren der 5-DigitBroker.
Das würde bei ihm nach Deiner Funktion und den Variablenwerten von StopLoss = 25 und TakeProfit = 20 zu realen Werten von 2,5 und 2,0 Pips führen. Da kann es schon wieder Probleme mit dem StopLevel geben.

traderdoc

pako 24.06.15 15:43

Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von traderdoc (Beitrag 30252)
Nun lass ihn mal ein wenig mitmachen.

STOPLOSS*Point() und TAKEPROFIT*Point()
Außerdem wieder diese unsaubere Sache mit dem Ignorieren der 5-DigitBroker.
Das würde bei ihm nach Deiner Funktion und den Variablenwerten von StopLoss = 25 und TakeProfit = 20 zu realen Werten von 2,5 und 2,0 Pips führen. Da kann es schon wieder Probleme mit dem StopLevel geben.

traderdoc

das kann man noch in init() funktion berechnen

und logische fehler lieber im debugger suchen

aber erst syntax fehler korrigieren

traderdoc 24.06.15 15:53

Zitat:

Zitat von pako (Beitrag 30253)
das kann man noch in init() funktion berechnen

und fehler suchen lieber im debugger


Ja! Das sollte man da immer berechnen. Nur wenn er die Funktion so nimmt, wie Du sie vorgegeben hast, kann es falsch werden und dann wundert er sich beim nächsten mal, warum wieder der Fehler 130 kommt oder warum seine Stops so dicht am Entry sitzen.

traderdoc

saro2018 24.06.15 15:54

Zitat:

Zitat von traderdoc (Beitrag 30249)
Das könnte nicht nur sein, sondern das ist es mit Sicherheit, weil Du setzt direkt die Pipwerte der Variablen StopLoss und TakeProfit ein!! Das geht natürlich nicht!
Print(StopLoss)!

Berechne doch einfach den zu setzenden StopLoss so, wie Du ihn auch weiter oben bei Dir im Programm schon berechnet hast!

traderdoc

Habe es jetzt wie folgt gemacht:

Code:

if (closedProfit < 0) {
    Print("T");

  // if(total < 1) {          //was soll total sein???
      if (lastorder == 0) {
     
      RefreshRates();
      S=Bid + second_sl;
      T=Bid - second_tp;
        ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 2, S, T, NULL, mymagicnumber);
       
      }
      if (lastorder == 1)
      {
     
      RefreshRates();
      S=Ask - second_sl;
      T=Ask + second_tp;
      ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 2,S, T, NULL, mymagicnumber);
      }
  }

Allerdings jetzt ignoriert er komplett diese Bedinung und geht gleich wieder zurück zur Ursprünglichen. Im Journal wird nämlcih das T nicht angezeigt.
Woran kann das jetzt liegen?

Gruß
Aron

pako 24.06.15 16:11

Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von saro2018 (Beitrag 30255)
Habe es jetzt wie folgt gemacht:

Code:

if (closedProfit < 0) {
    Print("T");

  // if(total < 1) {          //was soll total sein???
      if (lastorder == 0) {
     
      RefreshRates();
      S=Bid + second_sl;
      T=Bid - second_tp;
        ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 2, S, T, NULL, mymagicnumber);
       
      }
      if (lastorder == 1)
      {
     
      RefreshRates();
      S=Ask - second_sl;
      T=Ask + second_tp;
      ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 2,S, T, NULL, mymagicnumber);
      }
  }

Allerdings jetzt ignoriert er komplett diese Bedinung und geht gleich wieder zurück zur Ursprünglichen. Im Journal wird nämlcih das T nicht angezeigt.
Woran kann das jetzt liegen?

Gruß
Aron

if (closedProfit < 0)
{
if (lastorder == 0)
{
RefreshRates();
S=Bid + second_sl;
T=Bid - second_tp;
Print("T =", T, " S =", S);
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 2, S, T, NULL, mymagicnumber);
}
if (lastorder == 1)
{
RefreshRates();
S=Ask - second_sl;
T=Ask + second_tp;
Print("T =", T, " S =", S);
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 2,S, T, NULL, mymagicnumber);
}
}


erst syntax fehler korrigieren

traderdoc 24.06.15 16:19

Diese! Änderungen haben aber nichts damit zu tun, ob das Programm unter
if (closedProfit < 0) einspringt oder nicht.
Wichtig wäre v.a., dass vorher auch S und T deklariert werden und wie hast Du nun das second_sl und second_tp berechnet?

traderdoc

saro2018 24.06.15 16:27

Zitat:

Zitat von traderdoc (Beitrag 30257)
Diese! Änderungen haben aber nichts damit zu tun, ob das Programm unter
if (closedProfit < 0) einspringt oder nicht.
Wichtig wäre v.a., dass vorher auch S und T deklariert werden und wie hast Du nun das second_sl und second_tp berechnet?

traderdoc

Wie folgt habe ich die Sachen delariert und berechnet:

Code:

extern double TAKE      = 10;
extern double STOP      = 10;


double S, T;          //oben bei den blobal variables
double second_tp;
double second_sl;

int init()
{ [...]

second_sl = NormalizeDouble(my_point * STOP, digits);

second_tp = NormalizeDouble(my_point * TAKE, digits);

Stimmt bei den Deklarationen und Berechnungen alles? Habe es praktisch genauso umgesetzt, wie auch bei der oberen Bedingung, falls eine Order im Profit schließt.
Ist damit alles richtig?

Gruß
Aron

saro2018 24.06.15 16:37

Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von pako (Beitrag 30256)
if (closedProfit < 0)
{
if (lastorder == 0)
{
RefreshRates();
S=Bid + second_sl;
T=Bid - second_tp;
Print("T =", T, " S =", S);
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 2, S, T, NULL, mymagicnumber);
}
if (lastorder == 1)
{
RefreshRates();
S=Ask - second_sl;
T=Ask + second_tp;
Print("T =", T, " S =", S);
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 2,S, T, NULL, mymagicnumber);
}
}


erst syntax fehler korrigieren

Syntax Fehler sind keine mehr drin. Die Berechnungen im Mittelteil sind da noch nicht drin gewesen deswegen bei dir die Syntax Fehler.

Das Problem ist, er erkennt diesen Befehl gar nicht. Im Journal zeigt er nur an, dass er bei der ersten Bedingung ist (falls Profit), die andere wird ignoriert..

Hier nochmal das Journal (T-1 heißt die erste Bedingun falls Gewinn).

Gruß
Aron

pako 24.06.15 16:42

Zitat:

Zitat von saro2018 (Beitrag 30259)
Syntax Fehler sind keine mehr drin. Die Berechnungen im Mittelteil sind da noch nicht drin gewesen deswegen bei dir die Syntax Fehler.

Das Problem ist, er erkennt diesen Befehl gar nicht. Im Journal zeigt er nur an, dass er bei der ersten Bedingung ist (falls Profit), die andere wird ignoriert..

Hier nochmal das Journal (T-1 heißt die erste Bedingun falls Gewinn).

Gruß
Aron

wo ist code?

saro2018 24.06.15 16:59

Zitat:

Zitat von pako (Beitrag 30260)
wo ist code?

Den habe ich schonmal gepostet bis auf die Berechnungen in der Mitte. Diese funktionieren acuh, nur dieser untere Teil macht Schwierigkeiten mit der Orderöffnung fall der letzte Trade ein Verlust war. Es geht um die Gegenposition, sprich der Ordereröffnung bei einem Verlust gleich eine Gegenposition.

Gruß
Aron

saro2018 25.06.15 09:47

Zitat:

Zitat von traderdoc (Beitrag 30257)
Diese! Änderungen haben aber nichts damit zu tun, ob das Programm unter
if (closedProfit < 0) einspringt oder nicht.
Wichtig wäre v.a., dass vorher auch S und T deklariert werden und wie hast Du nun das second_sl und second_tp berechnet?

traderdoc

Bei dem neuen Stop und Takeprofit, den ich berechnet habe, kommt der Error 130 zwar nicht mehr, allerdings auch nicht mehr das T. Das bedeutet ja, dass er diese Bedinung nun ignoriert bzw. sie nicht ausführt.
Woran könnte das liegen?

Gruß
Aron

traderdoc 25.06.15 10:08

Der Code ist zu lang, um mal so den Fehler aus der Hüfte geschossen zu erkennen.
Der Weg, den Fehler zu eruieren, geht darüber, dass Du Dir überlegst, wie die Abfolge im Code ist und an den markanten Stellen über Print() Dir die Ausgabe anzeigen läßt. Hatte ich aber alles schon geschrieben.

Nochmals die korrekten Stopangaben haben nix mit dem Einsprung an dieser Stelle zu tun. Da liegt der Hase woanders begraben.

traderdoc

saro2018 25.06.15 17:38

Zitat:

Zitat von traderdoc (Beitrag 30268)
Der Code ist zu lang, um mal so den Fehler aus der Hüfte geschossen zu erkennen.
Der Weg, den Fehler zu eruieren, geht darüber, dass Du Dir überlegst, wie die Abfolge im Code ist und an den markanten Stellen über Print() Dir die Ausgabe anzeigen läßt. Hatte ich aber alles schon geschrieben.

Nochmals die korrekten Stopangaben haben nix mit dem Einsprung an dieser Stelle zu tun. Da liegt der Hase woanders begraben.

traderdoc

Also ich habe jetzt an den markanten Stellen überall ein Print() versehen, um zu schauen wie die Abfolge ist. Wenn ich den Code jetzt verkleiner in dem ich den Wert gleich einsetze und den dann zu normalizeddouble umrechne, macht er wieder den gleichen fehler. er checkt zwar die bedinung wegen dem print sendet mir allerdings wieder den error 130.

Woran kann das liegen?

Gruß
Aron


Alle Zeitangaben in WEZ +2. Es ist jetzt 00:46 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