Fehlercode "0"?

 

Ich habe Schwierigkeiten zu verstehen, warum die Long-Positionen funktionieren und die Short Trades überhaupt nicht?

Ich habe das Gefühl, dass es etwas mit meiner Init-Funktion zu tun hat, um die Anzahl der Dezimalstellen mit dem gegebenen Broker zu bestimmen. (da dies der Grund dafür zu sein scheint, dass gleich zu Beginn, wenn ich den Tester zum ersten Mal starte, Phantomaufträge ausgegeben werden...)

Hat jemand eine Idee, warum die Short-Seite mir diesen Fehler meldet?


Vielen Dank im Voraus (der Code ist ein wenig chaotisch im Moment, ich beabsichtige, es zu bereinigen, natürlich!)

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

   double ticksize = MarketInfo(Symbol(), MODE_TICKSIZE);
   if (ticksize == 0.00001 || ticksize == 0.001) // if you set this to 0 it WONT throw an order out straight away.
   pips = ticksize*10;
   else pips = ticksize;  
   

   return(0);
  }
//+----

//+------------------------------------------------------------------+
//| Order Enter Function                                             |
//+------------------------------------------------------------------+

void OrderEntry (int direction)
{    
   
  int PositionIndex;    //  <-- this variable is the index used for the loop
  int TotalNumberOfOrders;   //  <-- this variable will hold the number of orders currently in the Trade pool
  TotalNumberOfOrders = OrdersTotal();    // <-- we store the number of Orders in the variable
   
   
   double s12 = iMA(NULL,60,60,0,1,0,1); 
   double i121 = iMA(NULL,60,60,0,1,0,1);
   
   double LotSize=0;
   double Equity=AccountEquity();
   double RiskedAmount=Equity*RiskPercent*0.01;

   int iTBT= iBarShift(NULL,60, triggerBarTime, true),
        iHH= iHighest(NULL,60, MODE_HIGH, iTBT + 1, 0); 
            double buyPrice = High[iHH]+PadAmount*pips;
   
   
    int iTBT_1= iBarShift(NULL,60, triggerBarTime1, true),
        iLL= iLowest(NULL,60, MODE_LOW, iTBT_1 + 1, 0); 
            double sellPrice = Low[iLL]-PadAmount*pips;
            
   
   double buy_stop_price = iMA(NULL,60,60,0,1,0,1)-PadAmount*pips; 
   double pips_to_bsl = buyPrice-buy_stop_price;         
   double buy_takeprofit_price = (pips_to_bsl*RewardRatio)+buyPrice;   
   double sell_stop_price = iMA(NULL,60,60,0,1,0,1)+PadAmount*pips; 
   double pips_to_ssl = sell_stop_price-sellPrice;     
   double sell_takeprofit_price = sellPrice-(pips_to_ssl*RewardRatio);
   
//+----------------------------------------------------------------------------------------------------------------------------------------+  
//+----------------------------------------------------------------------------------------------------------------------------------------+   
   
  
if (direction==0) //--Buy--//
   {
      
      {
      double bsl=buy_stop_price;
      double btp=buy_takeprofit_price;
      LotSize = (RiskedAmount/(pips_to_bsl/pips))/10;
      if(OpenOrdersThisPair(Symbol())==0) 
      int BuyTicketOrder = OrderSend(Symbol(),OP_BUYSTOP,LotSize,buyPrice,3,bsl,btp,NULL,MagicNumber,0,Green); 
      
      if(BuyTicketOrder > 0)
         {
         Print("Order Placed #", BuyTicketOrder);
         }
      else
         {
         Print("Order Send Failed, error # ", GetLastError());   
         }
  
      }
   }

            
if (direction==1)//--Sell--//
   {
      {
      double ssl=sell_stop_price;
      double stp=sell_takeprofit_price;
      LotSize = (RiskedAmount/(pips_to_ssl/pips))/10;    
      if(OpenOrdersThisPair(Symbol())==0)  
      int SellTicketOrder = OrderSend(Symbol(),OP_SELLSTOP,LotSize,sellPrice,3,ssl,stp,NULL,MagicNumber,0,Red); 
  
      if(SellTicketOrder > 0)
         {
         Print("Order Placed #", SellTicketOrder);
         }
      else
         {
         Print("Order Send Failed, error # ", GetLastError());   
         }
 
      }
   }
} 
 

Wird der Handel eingetragen, wenn Sie einen Kommentar abgeben?

//if(OpenOrdersThisPair(Symbol())==0
Geht er ein, wenn
LotSize = 0.1;
usw. Arbeiten Sie sich zurück, bis er anfängt, Abschlüsse einzugeben, dann werden Sie wahrscheinlich wissen, wo das Problem liegt.
 
Ja, er geht auf der Long-Seite ein, sogar mit Losgröße "0"...

Ändern Sie die OpenOrderThisPair funktioniert auch nicht.... Hmmm. Das ist sehr seltsam...
 
DomGilberto:
Ja, er geht auf der Long-Seite ein, selbst bei Losgröße "0"...

Das Ändern der OpenOrderThisPair funktioniert auch nicht.... Hmmm. Das ist sehr seltsam...

Wenn dieser Test einen Wert ungleich Null ergibt . . .

if(OpenOrdersThisPair(Symbol()) == 0)  

. . . wird OrderSend() nicht aufgerufen, aber Sie prüfen trotzdem, ob SellTicketOrder größer als 0 ist.

Tun Sie dies...

if (direction==1)//--Sell--//
   {
      {
      double ssl=sell_stop_price;
      double stp=sell_takeprofit_price;
      LotSize = (RiskedAmount/(pips_to_ssl/pips))/10;    
      if(OpenOrdersThisPair(Symbol())==0)
         {
         int SellTicketOrder = OrderSend(Symbol(),OP_SELLSTOP,LotSize,sellPrice,3,ssl,stp,NULL,MagicNumber,0,Red); 
  
         if(SellTicketOrder > 0)
            {
            Print("Order Placed #", SellTicketOrder);
            }
         else
            {
            Print("Order Send Failed, error # ", GetLastError());   
            }
         }
      }
 
Nein - scheint die Verkaufsorder nicht senden zu wollen...

Es muss ein Fehler in der Art und Weise sein, wie ich den Code in Bezug auf die "IF"-Anweisungen innerhalb der for-Schleife geschrieben habe, die die OrderEntry-Funktion sendet, um eine Bestellung auszulösen...
 
DomGilberto:
Nope - scheint nicht zu wollen, um die Verkaufsorder zu senden...

Es muss ein Fehler in der Art und Weise sein, wie ich den Code in Bezug auf die "IF"-Anweisungen innerhalb der for-Schleife geschrieben habe, die die OrderEntry-Funktion sendet, um eine Bestellung auszulösen...

Welche Fehlermeldung erhalten Sie jetzt? Wenn Sie keine erhalten und auch nicht "Order placed # 12345", dann wird OrderSend() nicht aufgerufen und Sie haben ein Problem mit Ihrer OpenOrdersThisPair() -Funktion... posten Sie Ihren Code.
 
Wenn dies läuft, funktioniert es gut für die lange Seite (ich habe gerade mit diesem für die letzten 2 Stunden jetzt herumspielen). Die Sache ist, ich werde höchstwahrscheinlich Wind Sie und eine bestimmte jemand auf, wie ich weiß, wo ich falsch gehe (wo ich "CheckForMaTrade" Funktion aufrufen) in Bezug auf die IF-Anweisungen in Bezug auf die gleitenden Durchschnitt Parameter, und wie, wenn sie "true" es OrderEntry zu OrderSend senden wird... Das Problem ist, dass ich immer noch lerne, wie man diesen Teil richtig schreibt...
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+

int start()
  {
//----
   
   if(OpenOrdersThisPair(Symbol())>=1)
      {
      if(UseMoveToBreakEven)MoveToBreakEven();
      if(UseTrailingStop)AdjustTrail();
      if(Use_MA_Trail)MA_Trail();
      }
      if(IsNewCandle())CheckForMaTradeLong();
      if(IsNewCandle())CheckForMaTradeShort();
//----
   return(0);
  }
 
DomGilberto:
Wenn dies läuft, funktioniert es gut für die lange Seite (ich habe gerade mit diesem für die letzten 2 Stunden jetzt herumspielen). Die Sache ist, ich werde höchstwahrscheinlich Wind Sie und eine bestimmte jemand auf, wie ich weiß, wo ich falsch gehe (wo ich "CheckForMaTrade" Funktion aufrufen) in Bezug auf die IF-Anweisungen in Bezug auf die gleitenden Durchschnitt Parameter, und wie, wenn sie "true" es OrderEntry zu OrderSend senden wird... Das Problem ist, dass ich immer noch lerne, wie man diesen Teil richtig schreibt...

RaptorUK:
Welchen Fehler erhalten Sie jetzt? Wenn Sie keinen erhalten und auch nicht "Order placed # 12345", dann wird OrderSend() nicht aufgerufen und Sie haben ein Problem mit Ihrer OpenOrdersThisPair()-Funktion ... posten Sie Ihren Code.


Also ... . . welchen Fehler erhalten Sie, usw. .
 
Oh, Entschuldigung - ich erhalte keine Fehler mehr, was auch immer. Ich bin immer nur Kaufaufträge gehen durch und keine Verkaufsaufträge...

Es ist in Bezug auf meine früheren Thread in Bezug auf MA Cross Overs - Ich verstehe es immer noch nicht! Aber ich möchte niemanden aufziehen und ein totes Pferd schlagen, während mir die Leute die Antwort geben (obwohl ich die Antwort nicht verstehe, lol)! Vielen Dank RaptorUK für deine Hilfe!
 
     if(IsNewCandle())CheckForMaTradeLong();
     if(IsNewCandle())CheckForMaTradeShort();
Ich unterstütze zwar das Factoring von Operationen in Funktionen, aber nicht für die meisten Variationen von New Candle/New Bar, da diese Funktion nur EINMAL [per start()] aufgerufen werden kann.
int start(){
   static datetime time0; bool isNewCandle = time0 != Time[0]; time0 = Time[0]; // Once per start only.
   :
      if(isNewCandle)CheckForMaTradeLong();
      if(isNewCandle)CheckForMaTradeShort();
 
Danke WHRoeder - guter Tipp!
Grund der Beschwerde: