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)
-   -   OrderSelect und Error 130 (http://www.expert-advisor.com/forum/showthread.php?t=4779)

BBGPS 12.02.16 15:33

OrderSelect und Error 130
 
Hallo,
N Neuling braucht mal wieder Hilfe.
Bekomm im Editor bei meinem Code( Erster überhaupt) immer ne OrderSelect warnung.
Hab gelesen das es nicht unbedingt was heißt, sprich das könnte man lassen.

Im Backtest gibts aber nen Error 130. Also "Stops sind nicht im korrekten Datentyp".
Ich denke das mein Indikator einen Wert ausgibt mit dem ich keine Stops berechnen kann.
Hab jetzt schon einiges Ausprobiert, kann also sei das ganz andere Fehler im code sind. Ich geh aber davon aus das es immer der gleiche is.:)

N Lösungsvorschlag währe schön.

lg.GPS


Code:

extern double Lot = 0.1;
extern double SL = 0.0015;

int start()
{
int  Stoch, StochV, StochVV;
double Price1, Price2;
int      TP, ST;
bool    signal;
double  kauf1,kauf2,stoppkurs,zahl,ticket,MN=5;
//__________________________________________________________

  for (ST=0;ST<3;ST++)
      {
      Stoch    =    iCustom(NULL,0,"Stochastic",5,0,3,0,0);
      StochV  =    iCustom(NULL,0,"Stochastic",5,0,3,0,1);
      StochVV  =    iCustom(NULL,0,"Stochastic",5,0,3,0,2);
      }
      if ((Stoch > StochV) && (StochV < StochVV)) //buy
        {
        signal=false;
        Price1=Point;}
       
      if ((Stoch < StochV) && (StochV > StochVV)) //sell
        {
        signal=true;
        Price2=Point;}
 
      if (signal=false)
        {Comment("Buy");} 
       
      if (signal=true)
       
        {Comment("Sell");}

//______________________Sell____________________________________

  if(signal==true)
  {
  kauf2 = Bid;
  TP=Price1;
  stoppkurs = kauf2 - SL;
  }

//__________________Buy_________________________________________

  if(signal==false)
  {
  kauf1 = Ask; 
  TP=Price2;
  stoppkurs = kauf1 - SL;
  }

//_____________________OrderAnzahl______________________________

  int OffeneO=0;
  int AnzahlO=OrdersTotal();
 
  for(zahl=0;zahl<AnzahlO;zahl++)
      OrderSelect(zahl,SELECT_BY_POS,MODE_TRADES);
      { if (OrderSymbol() == Symbol())
        {  if(OrderMagicNumber() == MN)
          {
        OffeneO++;
          }
        }
      }
//______________Orders aufgeben Buy_______________________________

if( kauf1>0||kauf2>0){
  if(signal==false)
  {
  ticket=OrderSend(Symbol(),OP_BUY,Lot,kauf1,4,stoppkurs,TP,NULL,MN,0,Blue);
      return 0;
      }
//________________Orders aufgeben Sell_____________________________
  if(signal==true)
  {
  ticket=OrderSend(Symbol(),OP_SELL,Lot,kauf2,4,stoppkurs,TP,NULL,MN,0,Red);
      return 0;
      }
      }
return 0;
}


traderdoc 12.02.16 15:52

Wer hat denn behauptet, dass Error 130 zu vernachlässigen sei?
Einer der bedeutendsten Fehler überhaupt!

//______________________Sell________________________ ____________

if(signal==true)
{
kauf2 = Bid;
TP=Price1;
stoppkurs = kauf2 - SL;

Beim Sell liegt der StopLoss-Kurs immer über dem Entry, also:

stopkurs = kauf2 + SL;

Desweiteren macht der TP keinen Sinn, weil die Variable Point je nach WP den Wert 0.01, 0.001, 0.0001 oder 0.00001 haben wird. Da schreibt man besser gleich: TP = 0;

Und Slippage = 4 könnte bei einem 5-DigitBroker sehr eng werden, weil diese 4 dann real nur 0,4 Pips entsprächen.

traderdoc

pischinger 12.02.16 16:02

error 130 ist nicht unbedingt der datentyp gemeint wie von te angenommen, auch sind zu enge stops gemeint...broker verlangt 15 pips mit dem ordersend werden nur 10 pips mitgesendet.

zusatz zum traderdoc, tp,sl:

empfehlung: immer tp, sl zuerst mit "0" im ordersend und sofort danach mit order modify auf den gewünschten tp, sl modifizieren, dann dürfen es auch weniger pips sein als vom broker verlangt.

solange nicht auf m1 sollte das gut funktionieren.

traderdoc 12.02.16 16:31

Zitat:

Zitat von pischinger (Beitrag 33147)
error 130 ist nicht unbedingt der datentyp gemeint wie von te angenommen, auch sind zu enge stops gemeint...broker verlangt 15 pips mit dem ordersend werden nur 10 pips mitgesendet.

zusatz zum traderdoc, tp,sl:

empfehlung: immer tp, sl zuerst mit "0" im ordersend und sofort danach mit order modify auf den gewünschten tp, sl modifizieren, dann dürfen es auch weniger pips sein als vom broker verlangt.

solange nicht auf m1 sollte das gut funktionieren.

Na ja, das ist ein zweischneidiges Schwert mit dem nachträglichen Setzen des SL und TP. Wenn bei der direkten Mitsendung der beiden Stops ein Fehler wegen falscher Stops entsteht, wird auch keine Order geöffnet. Wenn aber ohne Mitsenden der Stops eine Order geöffnet wird, aber im Nachgang das OrderModify fehlschlägt, dann hängen Orders im Markt ohne SL!!!.
Das kann zuweilen mächtig ins Auge gehen.
Der Broker verlangt auch nur so viel Abstand vom Entry wie der Wert der Variablen MODE_STOPLEVEL der Funktion MarketInfo() beträgt. Zu beachten sei der Text dazu:
"A zero value of MODE_STOPLEVEL means either absence of any restrictions on the minimal distance for Stop Loss/Take Profit or the fact that a trade server utilizes some external mechanisms for dynamic level control, which cannot be translated in the client terminal. In the second case, GetLastError() can return error 130, because MODE_STOPLEVEL is actually "floating" here."

traderdoc

pischinger 12.02.16 16:46

Zitat:

Zitat von traderdoc (Beitrag 33149)
Na ja, das ist ein zweischneidiges Schwert mit dem nachträglichen Setzen des SL und TP. Wenn bei der direkten Mitsendung der beiden Stops ein Fehler wegen falscher Stops entsteht, wird auch keine Order geöffnet. Wenn aber ohne Mitsenden der Stops eine Order geöffnet wird, aber im Nachgang das OrderModify fehlschlägt, dann hängen Orders im Markt ohne SL!!!.
Das kann zuweilen mächtig ins Auge gehen.
Der Broker verlangt auch nur so viel Abstand vom Entry wie der Wert der Variablen MODE_STOPLEVEL der Funktion MarketInfo() beträgt. Zu beachten sei der Text dazu:
"A zero value of MODE_STOPLEVEL means either absence of any restrictions on the minimal distance for Stop Loss/Take Profit or the fact that a trade server utilizes some external mechanisms for dynamic level control, which cannot be translated in the client terminal. In the second case, GetLastError() can return error 130, because MODE_STOPLEVEL is actually "floating" here."

traderdoc

schrieb ja, für scalper nicht so optimal, wobei zu beachten ist das manche broker sowieso eine mimimum open time für neue orders haben...könnten! steht meistens in den agb des brokers versteckt!!!. gerade wenn die quoten extrem fallen sind die agbs genau zu kennen (min. open time, was passiert wenn der broker keine quoten von seinen (clearing) (feed) banken bekommt...)

zusatzinfo: wobei eigentlich bereits nach dem "order confirm" des orderbook servers des brokers sofort die order modifiziert werden kann, also auch zwischen den ticks! wobei dann natürlich der nächste tick für das "modify confirm" abgewartet werden muss...somit ist im bestfall das modify beim nächsten tick durch (kein requote, slippage,...) abhängig vom quoteserver des brokers. welche broker slippen, requoten oder das virtual dealer plugin verwenden hat man am live sowieso schnell heraus.

traderdoc 12.02.16 16:55

Zwischen Tick, nach dem Tick, wie auch immer. Nun lass aber mal beim OrderModify() den SL bei z.B. 1.23456789 sein, weil nicht normiert wurde, dann guckst Du mit dem OrderModify() in die Röhre, und es tritt das ein was ich schrieb:

Eine Order ohne SL!!

traderdoc

pischinger 12.02.16 17:08

Zitat:

Zitat von traderdoc (Beitrag 33153)
Zwischen Tick, nach dem Tick, wie auch immer. Nun lass aber mal beim OrderModify() den SL bei z.B. 1.23456789 sein, weil nicht normiert wurde, dann guckst Du mit dem OrderModify() in die Röhre, und es tritt das ein was ich schrieb:

Eine Order ohne SL!!

traderdoc

doc trink nen schnaps, freitag is es! ich gebe zusatzinfos! natürlich ist das korrekte absetzen des kommandos voraussetzung! damit sich der te darunter was vorstellen kann, anbei mein "modify" mit "normalizedouble" (beispiel hättest du auch geben können)
Code:

  void PairProfitModify(){
    bool modifypairprofit;
    for(cnt=OrdersTotal();cnt>=0;cnt--){
      if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic){
        if(OrderType()==OP_BUY){
            if(OrderTakeProfit()==0 && MinPairProfit!=0){
              RefreshRates();
              modifypairprofit=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),NormalizeDouble(Ask+MinPairProfit*pt,Digits),0,Red);
            }
        }

du bist und bleibst der coder guru! :)

traderdoc 12.02.16 17:26

Ach @pischinger, darum geht es mir doch gar nicht!

Aber auch hier müßte ich eigentlich wieder reingrätschen:

modifypairprofit=OrderModify(OrderTicket(),OrderOp enPrice(),OrderStopLoss(),NormalizeDouble(Ask+MinPairProfit*pt,Digits),0,Red);

Ich denke, dass der TP vom Entrykurs genommen werden sollte, also mittels OrderOpenPrice() bzw. wenn schon dann eher mit Bid.
Und dann kann @BBGPS evtl. auch mit pt nichts anfangen.

traderdoc

pischinger 12.02.16 17:50

Zitat:

Zitat von traderdoc (Beitrag 33156)
Ach @pischinger, darum geht es mir doch gar nicht!

Aber auch hier müßte ich eigentlich wieder reingrätschen:

modifypairprofit=OrderModify(OrderTicket(),OrderOp enPrice(),OrderStopLoss(),NormalizeDouble(Ask+MinPairProfit*pt,Digits),0,Red);

Ich denke, dass der TP vom Entrykurs genommen werden sollte, also mittels OrderOpenPrice() bzw. wenn schon dann eher mit Bid.
Und dann kann @BBGPS evtl. auch mit pt nichts anfangen.

traderdoc

-aha wo steht geschrieben das ich vom bid kurs ausgehen muss?
-wer legt fest das der orderopenprice zwingend verwendet werden muss, das es auf die stategie drauf ankommt...z.b. ist der tp,sell "meilenweit" (aka z.b. 100 pips)entfernt...long term trader... ist der orderopenprice aber sowas von egal!
sieht die strategie z.b. handeln auf m15 mit kleinen tp,sl vor dann gebe ich dir durchaus recht das der orderopenprice besser ist, zumindest wenn es um das verständnis für die meisten trader geht.
-es ging hier um das normalizedouble! minpairprofit solltest dann auch gleich bitte monieren, kann ja sein das der trader neuling ist.

und überhaupt, wenn dir mein beispiel nicht gefällt, ich habe eines gebracht, dann solltest du ein eigenes für dich korrektes beispiel posten, damit ein reingrätschen deinerseits nicht notwendig wird, ich will ja nicht das du dir noch schmerzen wegen mir einfängst :)

traderdoc 12.02.16 18:12

Ach @pischinger, das ist schon amüsant mit Dir.

Ein TP muß nicht vom OpenPrice aus genommen werden, sollte aber, weil dann die Nachvollziehbarkeit besser gegeben ist. Keiner setzt doch den TP oder SL "irgendwann und irgendwo" an. Man will doch den TP oder SL dann erreichen, wenn die Werte vom Öffnen der Order aus gesehen, gegeben sind. Und wenn schon Bid, dann deshalb, weil bekanntlich die BuyOrder mit dem Bid geschlossen wird und dann das Close auch besser nachvollziehbar ist.

Wir bleiben ganz entspannt und schmerzfrei und sehen dem WE gelassen entgegen.

traderdoc


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