OrdersTotal liefert 0
#include <Trade\Trade.mqh>
CTrade trade;
int gi_flag=1;
void OnTick()
{
if(gi_flag==1)
{
trade.PositionOpen(_Symbol,ORDER_TYPE_SELL,1, SymbolInfoDouble(_Symbol,ORDER_TYPE_SELL==ORDER_TYPE_SELL ? SYMBOL_BID:SYMBOL_ASK),0,0);
gi_flag=0;
}
PrintFormat(DoubleToString(OrdersTotal(),1));
}
Obwohl ich verstehe, dass es 1 zurückgeben sollte, oder lese ich es falsch?
Befehle sind keine Positionen. Ein Auftrag ist ein nicht ausgeführter Auftrag zur Eröffnung einer Position, während eine Position das Ergebnis der Ausführung eines Auftrags ist.
Danke, ich verstehe, wir verwenden also die Funktion PositionsTotal.
Was ist mit dem ersten Problem?
Ich habe diesen Code geschrieben und es ist nicht ganz klar, wo der Fehler liegen könnte
string Data() { string vr; string den; datetime date=TimeCurrent(); MqlDateTime str; TimeToStruct(date,str); switch(str.day_of_week) { case 0: den = "Воскресенье"; case 1: den = "Понедельник"; case 2: den = "Вторник"; case 3: den = "Среда"; case 4: den = "Четверг"; case 5: den = "Пятница"; case 6: den = "Суббота"; } printf("%02d.%02d.%4d %02d:%02d:%02d %d",str.day,str.mon,str.year,str.hour,str.min,str.sec,str.day_of_week); printf("%02d.%02d.%4d %02d:%02d:%02d %s",str.day,str.mon,str.year,str.hour,str.min,str.sec,den); return(StringFormat("%02d.%02d.%4d %02d:%02d:%02d %s",str.day,str.mon,str.year,str.hour,str.min,str.sec,den)); }
Das Protokoll gibt die folgenden Ergebnisse aus
MF 0 11:06:34 04.06.2010 09:06:43 5RN 0 11:06:34 04.06.2010 09:06:43 Samstag
Soweit ich weiß, ist der 5. Tag der Freitag.
Ich habe diesen Code geschrieben und es ist nicht ganz klar, wo der Fehler liegen könnte
Das Protokoll gibt die folgenden Ergebnisse aus
MF 0 11:06:34 04.06.2010 09:06:43 5RN 0 11:06:34 04.06.2010 09:06:43 Samstag
Soweit ich weiß, ist der 5. Tag der Freitag.
Für jeden beliebigen Wert von day_of_week erhalten Sie den Wert "Saturday". Da es keine Unterbrechungsoperatoren zwischen den Fällen gibt
2 weitere obskure Punkte
void OnTick()
{
for(int li=1; li<2; li++)
{
PrintFormat(SymbolName(li,true));
}
}
Gibt ein Leerzeichen oder ein Leerzeichen zurück, aber keinen Zeichennamen
void OnTick()
{
PrintFormat(DoubleToString(SymbolsTotal(true),1));
}
Gibt 1 zurück, obwohl ich mindestens 10 geöffnet habe
Aber wenn Sie false statt true eingeben, scheint alles gut zu funktionieren
Gibt ein Leerzeichen oder eine Leerstelle zurück, aber nicht den Namen des Zeichens
for(int li=0; li<SymbolsTotal(false); li++) { PrintFormat(SymbolName(li,false)); }Dies ist wahrscheinlich richtig, wenn Sie alles in der DC durchgehen wollen. Wenn Sie nur das, was in der Terminaltabelle steht, ändern Sie false in true.
Das ist es, was ich sage: wahr funktioniert nicht!
Das ist es, was ich sagen will: Es funktioniert nicht mit true!
Es funktioniert, ich habe es bei drei Maklerfirmen überprüft (ich habe alle Symbole gesucht, die bei Maklerfirmen gehandelt werden).
for(int li=0; li<SymbolsTotal(false); li++) { PrintFormat(SymbolName(li,false)); }
Und dieser Code durchläuft alles, was im "Market Watch"-Fenster ausgewählt ist
for(int li=0; li<SymbolsTotal(true); li++) { PrintFormat(SymbolName(li,true)); }
Was ich nicht verstehe, ist Folgendes. Warum sollte man eine solche Suche in OnTick() durchführen?
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Der Tester läuft auf EURUSD, alles funktioniert, beide Aufträge werden gesendet. Wenn wir die Zeile auskommentieren, wird die GBPUSD-Order nicht geöffnet und es wird ein Fehler im Protokoll angezeigt:
2010.06.02 10:34:26 Kern 1 fehlgeschlagen Sofortverkauf 1.00 GBPUSD bei 0.00000 [Ungültige Stops]
2010.06.02 10:34:26 Kern 1 Keine Preise für das Symbol GBPUSD
Ich habe es mit SymbolInfoTick versucht, dasselbe Ergebnis.
Kennen Sie das SymbolInfoTick oder SymbolInfoDouble?