Warum ist MqlRates.spread ein Integer?

 

Hallo,

ich habe leider über dieses Thema keinen vorhandenen Eintrag finden können und bin darüber etwas überrascht. Ich hole über die Price History historische Forex-Daten (EUR-USD). Im Array MqlRates gibt es das Feld "spread", das ein int ist.

Warum? Wir kann ich anhand dieses Wertes (der außer in Phasen niedriger Liquidität immer 0 ist) den Spread auslesen? Das Feld scheint weder den Spread in pips auszugeben, noch als absolute Differenz zwischen Ask und Bid.


Danke und Gruß

Alex

 
  1. Ist halt so, gewöhn' Dich dran ;)
  2. Kann historische Gründe haben oder
  3. praktische, da man für alle(!) Symbole 10 Punkte angeben kann, die einmal 0.0001, einmal 0.01, einmal 10, ... sein können.
 
was sollte es sonst sein, der Spread wird in Punkten angegeben, da gibts keine Kommastellen
 
amando #:
was sollte es sonst sein, der Spread wird in Punkten angegeben, da gibts keine Kommastellen
Das passt aber nicht bei Forex. Ein Spread ist definitiv vorhanden, aber zurückgegeben wird (bis auf Ausnahmen) "0". In Minuten, wo der Spread wahrscheinlich 10 Pips ist, wird "1" zurückgegeben aber das ist höchst ungenau. Da kann man _nichts_ mit anfangen!
 
AlZi71 #:
Das passt aber nicht bei Forex. Ein Spread ist definitiv vorhanden, aber zurückgegeben wird (bis auf Ausnahmen) "0". In Minuten, wo der Spread wahrscheinlich 10 Pips ist, wird "1" zurückgegeben aber das ist höchst ungenau. Da kann man _nichts_ mit anfangen!

Ich glaube, da liegst Du falsch oder hast Du Beweise? (Ask-Bid)/_Point. Es gibt Broker, die bieten feste Spread an und welche mit variablen (SymbolInfoInteger()):

SYMBOL_SPREAD_FLOAT

Indication of a floating spread

bool

SYMBOL_SPREAD

Spread value in points

int

 
AlZi71 #:
Das passt aber nicht bei Forex. Ein Spread ist definitiv vorhanden, aber zurückgegeben wird (bis auf Ausnahmen) "0". In Minuten, wo der Spread wahrscheinlich 10 Pips ist, wird "1" zurückgegeben aber das ist höchst ungenau. Da kann man _nichts_ mit anfangen!

Hallo,

ich habe einen Kode erstellt mit Vier Spread-Varianten.

Wählen Sie Ihren aus.

//+------------------------------------------------------------------+
//|                                                 SpreadDigits.mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"

#include <Trade/SymbolInfo.mqh>
CSymbolInfo m_symbol;

int OnInit() {

   return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason) {


}

void OnTick() {

   int digits_adjust=1;
   if(m_symbol.Digits()==2 || m_symbol.Digits()==5) {
      digits_adjust=1;
   } else {
      digits_adjust=10;
   }

   ulong  Spread             = SymbolInfoInteger(_Symbol,SYMBOL_SPREAD);
   ulong  SpreadDigitsAdjust = SymbolInfoInteger(_Symbol,SYMBOL_SPREAD)*digits_adjust;
   double SpreadDigits       = NormalizeDouble(Spread,_Digits);
   double SpreadPoint        = SymbolInfoInteger(_Symbol,SYMBOL_SPREAD)*_Point;

   Print("Spread: "+(string)Spread);
   Print("SpreadDigitsAdjust: "+(string)SpreadDigitsAdjust);
   Print("SpreadDigits: "+(string)SpreadDigits);
   Print("SpreadPoint"+(string)SpreadPoint);

}
//+------------------------------------------------------------------+

Gruß Igor

 

Hallo,


vielen Dank für die Antworten. Ich will noch kurz die Auflösung berichten:

Ich schrieb: "... Das Feld scheint weder den Spread in pips auszugeben, noch als absolute Differenz zwischen Ask und Bid..."


Das war mein Irrtum. Der neue Broker, mit dem ich diese Tests gemacht habe stellt für EUR-USD einen Spread von minimal 0.8 Pips zur Verfügung. Bei meinem Alten war das minimal 1.6 Pips, daher erwartete ich mindestens eine (abgerundete) "1". Mit den Ausgaben in besonderen Marktphasen scheint es tatsächlich der Wert in Pips zu sein, der dann leicht auf 1 oder mehr ansteigt. Ich denke mal, das wurde für Aktienmärkte (Points) so festgelegt und für Wechselkurse einfach übertragen. Damit ist das also etwas ungenau, aber ich kann damit leben.


Viele Grüße

Alex

 
AlZi71 #:

Hallo,


vielen Dank für die Antworten. Ich will noch kurz die Auflösung berichten:

Ich schrieb: "... Das Feld scheint weder den Spread in pips auszugeben, noch als absolute Differenz zwischen Ask und Bid..."


Das war mein Irrtum. Der neue Broker, mit dem ich diese Tests gemacht habe stellt für EUR-USD einen Spread von minimal 0.8 Pips zur Verfügung. Bei meinem Alten war das minimal 1.6 Pips, daher erwartete ich mindestens eine (abgerundete) "1". Mit den Ausgaben in besonderen Marktphasen scheint es tatsächlich der Wert in Pips zu sein, der dann leicht auf 1 oder mehr ansteigt. Ich denke mal, das wurde für Aktienmärkte (Points) so festgelegt und für Wechselkurse einfach übertragen. Damit ist das also etwas ungenau, aber ich kann damit leben.


Viele Grüße

Alex

Hallo,

der Brocker schreibt den Spread 0.8 aber in Wirklichkeit ist beim fünfstelligen Preis ist die Differenz 8 und bei 1.6 halt 16 punkte.

Trotzdem alles gute und guten Rutsch.

Gruß Igor