Zero Divide (Das Thema gefunden - aber warum?) - Seite 3

 
double loss_for_1_lot = pips_to_bsl/ ts * tv ;

Es ist NICHT tv, das zu einer div 0 führt. es kann nur ts sein. Auf einem 5-stelligen Broker ts könnte Null drucken (4 Ziffern)

Für mich klingt das so, als hätten Sie dieses Paar nie geöffnet, um die Marktinformationen von Ihrem Broker zu erhalten, bevor Sie die Historie von einem anderen Anbieter herunterladen.

 

Ich finde es schwierig zu glauben, dass die Nullteilung durch den geposteten Code erzeugt wird.

DomGilberto kompilieren Sie dieses Skript und fügen Sie es dem Diagramm hinzu, von dem Sie glauben, dass es eine Null-Ticksize zurückgibt.

int start()
  {
//----
   int i = Bars-1;
   int cnt;
   int tscnt = 0;
   int tvcnt = 0;
   double ts = MarketInfo(Symbol(), MODE_TICKSIZE);
   double tv = MarketInfo(Symbol(), MODE_TICKVALUE);
   while(i >=0)
   {if(ts < 0.00001) tscnt++;
    if(tv < 0.00001) tvcnt++;
    i--;
   }
   Alert("TickSize returned an erroneous value ",tscnt," times.");
   Alert("TickValue returned an erroneous value ",tvcnt," times.");
//----
   return(0);
  }
 
DomGilberto:

Ich hoffe, dass dieses Video, das ich gemacht habe (40 Sekunden oder so), veranschaulicht, wovon ich spreche (da ich nicht sicher bin, ob ich es klar mache oder nicht).

Video: http://screencast.com/t/uMHY5DpM

Sie werden sehen, dass der erste Teil, wenn ich das Skript auf dem Live-Chart (echtes Konto) ablege, dass der Tick-Wert und die Tick-Größe "0" auf diesem "fiktiven Konto" zurückgeben, was ich im Lots-Fenster (Einheiten) veranschauliche.

Der zweite Teil ist mit dem gleichen Broker, aber auf einem Lot-basierten Feed und dieses Mal gibt es einen Tick-Wert und Tick-Größe zurück. Auch hier zeige ich, dass Sie mit lots.... handeln.

Was den Strategietester betrifft, so habe ich keine Ahnung, warum er manchmal funktioniert und manchmal nicht. Das Konto war angeschlossen, während ich die Backtests durchführte (auf einem fiktiven Demokonto mit Einlagen (Einheiten)).

Meine nächste Frage wäre, wenn dies die typische Antwort ist, die ich von dem fiktiven Fed-Konto erhalte, können Sie mir dann vorschlagen, wie ich meine Positionsgrößenberechnung unter diesen Umständen korrigieren kann? Bei einer lotbasierten Einspeisung funktioniert sie perfekt... Ich hoffe, das erklärt es ein wenig besser?

Wenn Sie einen anderen Code in Ihrem "Test"-Code verwenden, was beweist das?

Sind Sie sich bewusst, dass TICKVALUE gibt den aktuellen Wert von jetzt ... auch während einer Strategie Testlauf? so für jedes Paar, wo die Basiswährung ist nicht die Einzahlung Währung wird es falsch sein und Ihre Lot-Berechnungen werden falsch sein ...

 

In Ihrem Video verwenden Sie im ersten Fall GBPUSD und im zweiten Fall GBPJPY.

Ich denke, wenn Sie Ihr Skript an ein normales Lot-Chart für GBPUSD angehängt hätten, würden Sie einen Wert für tickvalue erhalten, aber ticksize wäre auch Null.

Das liegt daran, dass Ihre Skript-Warnungen Doubles verwenden und daher 0,00001 als 0 ausgegeben wird.

Verwenden Sie stattdessenDoubleToStr(MarketInfo(Symbol(),MODE_TICKVALUE),8)

 

Ok, zunächst einmal vielen Dank für die Hilfe von allen.

Hier ist das Video für "Gumrai" und "SDC", das bestätigt, was Sie beide von mir verlangen. Ich habe die Skripte mit Ihren MQL4-Aliasnamen gekennzeichnet, die offensichtlich Ihrem hier geposteten Code entsprechen. Video: http://screencast.com/t/kglCd2hCae

Der Broker und der entsprechende Feed wurden während der Pause nicht geändert. Es handelt sich auch um ein fiktives Feed-Konto (Einheiten).

@RaptorUK: Ja, ich wusste, dass TICKVALUE den aktuellen Wert von jetzt an zurückgibt. Ich denke, dass dein zweiter Teil, wenn man es jetzt betrachtet, irgendwie logisch ist. Ich bin immer mit verwirrt, wie ich in der Lage, tickvalue als Teil meiner fiktiven Feed-Konto zu verwenden, um sicherzustellen, dass die Position Sizing korrekt ist...?

 
DomGilberto:

Ok, zunächst einmal vielen Dank für die Hilfe von allen.

Hier ist das Video für "Gumrai" und "SDC", das bestätigt, was Sie beide von mir verlangen. Ich habe die Skripte mit Ihren MQL4-Aliasnamen gekennzeichnet, die offensichtlich Ihrem hier geposteten Code entsprechen. Video: http://screencast.com/t/kglCd2hCae

Der Broker und der entsprechende Feed wurden während der Pause nicht geändert. Es handelt sich auch um ein fiktives Feed-Konto (Einheiten).

@RaptorUK: Ja, ich wusste, dass TICKVALUE den aktuellen Wert von jetzt an zurückgibt. Ich denke, dass dein zweiter Teil, wenn man es jetzt betrachtet, irgendwie logisch ist. Ich bin verwirrt, wie ich in der Lage bin, tickvalue als Teil meines fiktiven Feed-Kontos zu verwenden, um sicherzustellen, dass die Positionsgröße korrekt ist?


Diese Videos sind eine Qual, sie sind zu groß für meinen Bildschirm.

Warum nicht einfach den Skriptcode und das Ergebnis des Alarms posten?

Ich weiß nicht, was Sie in das Skript eingegeben haben, das mein vorgeschlagener Code sein sollte, aber es kann auf keinen Fall zu "08" führen.

Verwenden Sie .

Alert("TICKVALUE= ",DoubleToStr(MarketInfo(Symbol(),MODE_TICKVALUE),8));
Alert("TICKSIZE= ",DoubleToStr(MarketInfo(Symbol(),MODE_TICKSIZE),8));
 
DomGilberto:


@RaptorUK: Ja, ich wusste, dass TICKVALUE den aktuellen Wert von jetzt an zurückgibt. Ich denke, Ihr zweiter Teil, wenn man es jetzt betrachtet, ist irgendwie logisch. Ich bin immer verwirrt mit, wie ich in der Lage bin, Tickvalue als Teil meiner fiktiven Feed-Konto zu verwenden, um sicherzustellen, dass die Position Sizing korrekt ist...?

Zuerst müssen Sie bestätigen, dass TICKVALUE tatsächlich ein Null-Ergebnis zurückgibt, was Sie noch nicht getan haben.
 
GumRai:


Diese Videos sind eine Qual, sie sind zu groß für meinen Bildschirm.

Warum posten Sie nicht einfach den Skriptcode und das Ergebnis der Meldung?

Ich weiß nicht, was Sie in das Skript eingegeben haben, das mein vorgeschlagener Code sein sollte, aber es kann auf keinen Fall zu "08" führen.

Verwenden Sie


Sorry - ich merke jetzt, dass ich vergessen habe, "DoubleToStr" einzugeben, mein Fehler!

TickSize = 0.00100000

TickValue = 0.00001026

(Abgelegt auf GBPJPY notional feed)

@SDC Ich habe einfach Ihren Code von hier kopiert und ihn in ein neues Skript eingefügt. Das war es, was zurückgegeben wurde.

 
Ok neues Update, ich habe mit ihm gespielt, um die genaue Stelle zu wiederholen, wo die Null-Teilung auftritt.

Dieser Bereich in meinem Code habe ich es die Formel ausdrucken, um die Mathematik aufzuschlüsseln - Wo dies geschieht, ist auf einem KAUFEN PENDING ORDER... doch dieser Teil des Codes "pips_to_ssl" ist Pips zu SELL Stop Loss... Dieser wird NICHT für einen schwebenden Kauf-Stop-Auftrag verwendet....

double loss_for_1_lot1 = pips_to_ssl/  ts * tv  ;
   if( loss_for_1_lot1 == 0.0 )Print(" ERROR - loss_for_1_lot1 = 0.0 || The formula for this is: ", pips_to_ssl,"/",ts,"*",tv);


2013.10.02 11:57:19     2001.02.12 16:00  Trend Fishing - V1 - Notional Lots USDJPYnb,H1:  ERROR - loss_for_1_lot1 = 0.0 || The formula for this is: 0/0.001*0.0001

double pips_to_ssl=SellStopPrice-sellPrice;
   if(pips_to_ssl == 0)Print(" ERROR - pips_to_ssl = 0 || The formula for this is: ", SellStopPrice,"-",sellPrice); 

2013.10.02 12:08:01	2001.02.12 16:00  Trend Fishing - V1 - Notional Lots USDJPYnb,H1:  ERROR - pips_to_ssl = 0 || The formula for this is: 117.249-117.249

 
DomGilberto:
Ok neues Update, ich habe damit herumgespielt, die genaue Stelle zu wiederholen, wo die Nullteilung auftritt.

Dieser Bereich in meinem Code habe ich es die Formel ausdrucken, um die Mathematik aufzuschlüsseln - wo dies geschieht, ist auf einem BUY PENDING ORDER... doch dieser Teil des Codes "pips_to_ssl" ist Pips zu SELL Stop Loss... Dieser wird NICHT für einen schwebenden Kauf-Stop-Auftrag verwendet....



Ich verweise Sie zurück auf meinen früheren Beitrag

"Beachten Sie, dass

double loss_for_1_lot = pips_to_bsl/ ts * tv ; //<<<<<<<<<<<<<<<<<<<<<<<<<<< This is giving me a "0" randomly sometimes?

auch zu Null führt, wenn pips_to_bsl Null ist. Ist das möglich?"

bsl oder ssl, gleiche Kodierung.