Es ist schwierig, Bestellungen zu versenden. - Seite 3

 
Nun, es sieht so aus, als ob CT Trade es ist.
 
Er mag die dynamische Losgröße nicht? Es funktioniert mit ct trade, wenn ich eine feste Losgröße verwende.
 
MetaNt:
Es mag die dynamische Losgröße nicht? Es funktioniert mit ct trade, wenn ich eine feste Lotgröße verwende.

CTrade ist ein Wrapper für OrderSend().

Sie haben geschrieben, dass es nicht mit einem Volumen à 0.07 oder sogar 1 funktioniert. Wie definieren Sie das ? Lot=0.07 ?

 
angevoyageur:

CTrade ist ein Wrapper für OrderSend().

Sie haben geschrieben, dass es nicht mit einem Volumen à 0.07 oder sogar 1 funktioniert. Wie definieren Sie das ? Lot=0.07 ?

Ich war mir nicht sicher, ob ich Mqlrequest und Mqlresult richtig geschrieben hatte, und so habe ich stattdessen CTrade verwendet. Ich fand heraus, dass es funktionierte, wenn ich feste Volumina verwendete, und jetzt habe ich herausgefunden, dass ich die festen Volumina mit ganzen Zahlen multiplizieren kann, aber wenn ich versuche, die Volumina mit Brüchen zu ändern, erhalte ich Fehler wie ungültige Losgröße, das Ergebnis der geänderten Losgröße wird mit dem Fehler[ungültiges Volumen] ausgegeben.
 
Es sind Dezimalzahlen von gewisser Komplexität, ich werde versuchen, double zu normalisieren.
 
MetaNt:
Es ist Dezimalzahlen von bestimmter Komplexität, ich werde versuchen, normalize double.
Normalize double ist eine Lösung für die komplexen Dezimalzahlen zur Verfügung gestellt, ich werde es auf meine dynamische Partie versuchen.
 
MetaNt:
Normalize double ist ein Fix für die komplexen Dezimalzahlen, ich werde es auf meiner dynamischen Partie versuchen.

Behoben.

Sieht so aus, als ob es einer meiner Skalierungsfaktoren aus einigen Gleichungen war, die außerhalb des CT Buy/Sell lagen. Es war kein Problem, das ich in mql4 angetroffen hatte, also brauchte ich eine Weile, um es zu finden, ich werde darauf achten müssen, wenn mql4 wieder aktualisiert wird.

Für alle anderen, die dieses Problem haben, verwenden Sie 2 für den Ziffernteil der Funktion NormalizeDouble().

 

007 sagen Sie?

Das sollten Sie vielleicht Herrn Bond fragen ;-)

 

Ich scheine hier auf das gleiche Problem zu stoßen. Ich habe bestätigt, dass die Losgröße den Anforderungen SYMBOL_VOLUME_MIN, SYMBOL_VOLUME_MAX und SYMBOL_VOLUME_STEP entspricht.

Zum Beispiel erhalte ich dies:

2014.04.07 14:49:35 2014.04.04 16:00:00 CTrade::OrderSend: instant sell 0.53 EURUSD at 1.36934 sl: 1.37434 tp: 1.35934 [invalid volume]

Beim Backtesting von EA mit diesem Symbol und diesen Spezifikationen:


Hier der Code, den ich zum Senden der Order verwende:

int    losses=1;
int    DecimalPoints=2;
 double Risk=0.03;
double Inc=0.1;
my_symbol=Symbol();
leverage=AccountInfoInteger(ACCOUNT_LEVERAGE);
contract=SymbolInfoDouble(my_symbol,SYMBOL_TRADE_CONTRACT_SIZE);
min_lot=SymbolInfoDouble(my_symbol,SYMBOL_VOLUME_MIN);
max_lot=SymbolInfoDouble(my_symbol,SYMBOL_VOLUME_MAX);
trade_size=equity*(Risk/100)*leverage;
trade_size/=contract;
trade_size+=losses*Inc;
NormalizeDouble(trade_size,DecimalPoints);
  if(trade_size<min_lot)
    {
     trade_size=min_lot;
    }
  else if(trade_size>max_lot)
    {
     trade_size=max_lot;
    }
trade.Sell(trade_size,my_symbol,price,0,price-tp,"Expert Sell");

EDIT:

Ich kann natürlich manuell Trades mit genau dieser Lotgröße platzieren.

 
Candles:

Ich scheine hier auf das gleiche Problem zu stoßen. Ich habe bestätigt, dass die Losgröße den Anforderungen SYMBOL_VOLUME_MIN, SYMBOL_VOLUME_MAX und SYMBOL_VOLUME_STEP entspricht.

Zum Beispiel erhalte ich dies:

2014.04.07 14:49:35 2014.04.04 16:00:00 CTrade::OrderSend: instant sell 0.53 EURUSD at 1.36934 sl: 1.37434 tp: 1.35934 [invalid volume]

Beim Backtesting von EA mit diesem Symbol und diesen Spezifikationen:


Hier der Code, den ich zum Senden der Order verwende:

EDIT:

Ich kann natürlich manuell Trades mit genau dieser Lotgröße platzieren.

Diese Zeile ist ohne Wirkung:

NormalizeDouble(trade_size,DecimalPoints);

Sie müssen das Ergebnis in eine Variable einfließen lassen, siehe Dokumentation von NormalizeDouble.

trade_size=NormalizeDouble(trade_size,DecimalPoints);