SymbolInfoInteger SYMBOL_TRADE_STOPS_LEVEL

 

Hallo zusammen,

als ich heute eine kleine Spielerei mit einem Trailingstop entwickeln wollte, fiel mir auf, dass SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL) mir keine Zahl liefert.

Da habe ich mich gefragt, ob das womöglich am Broker liegt. Das Problem tritt bei Gold, GBPUSD, EURUSD, S&P500 auf.

Habe jetzt schon mit dem Broker geredet im Hilfechat. Da hieß es, ich solle bei MQL nachfragen.

Hier der abgespeckte SymbolInfoTestBot:

//+------------------------------------------------------------------+
//|                                                 SymbolInfoTestEA |
//|                                      Copyright 2020, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+

#property strict

double Ask, Bid, Balance, Equity, MinLots, MarginInit;
int    BGColor, Digits_, VolHigh, Spread, FreezeLvl, StopsLevel;
bool AllowExpert;
bool AllowTerminal;

void OnTick()
  {
   GetPrices();

   Comment("\n Ask: ",Ask,
           "\n Bid: ",Bid,
           "\n Balance: ",Balance,
           "\n Equity", Equity,
           "\n AllowTerminal: ", AllowTerminal,
           "\n AllowExpert: ", AllowExpert,
           "\n BGColor: ", BGColor,
           "\n Digits_: ", Digits_,
           "\n VolHigh: ", VolHigh,
           "\n Spread: ", Spread,
           "\n FreezeLvl: ", FreezeLvl,
           "\n StopsLevel: ",StopsLevel,
           "\n MinLots: ",MinLots,
           "\n MarginInit: ",MarginInit
          );
//  Print("***End Positions: ",PositionsTotal());
  }

void GetPrices()
  {
   Ask=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
   Bid=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);
   Balance=AccountInfoDouble(ACCOUNT_BALANCE);
   Equity=AccountInfoDouble(ACCOUNT_EQUITY);
   AllowTerminal=TerminalInfoInteger(TERMINAL_TRADE_ALLOWED); //Je nach Zusatand der Schaltfläche im MT true oder false... Perfekt!
   AllowExpert=AccountInfoInteger(ACCOUNT_TRADE_EXPERT); //gibt immer true zurück , egal ob in den Einstellungen Autotrad erlauben ausgewählt ist
   BGColor=SymbolInfoInteger(_Symbol,SYMBOL_BACKGROUND_COLOR);
   Digits_=SymbolInfoInteger(_Symbol,SYMBOL_DIGITS);
   VolHigh=SymbolInfoInteger(_Symbol,SYMBOL_VOLUMEHIGH);
   Spread=SymbolInfoInteger(_Symbol,SYMBOL_SPREAD);
   FreezeLvl=SymbolInfoInteger(_Symbol,SYMBOL_TRADE_FREEZE_LEVEL);
   StopsLevel=SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL);
   MinLots=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN);
   MarginInit=SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL);
  }
//+------------------------------------------------------------------+

Und hier das Ergebnis:


Nullen...

Bei StopsLevel, FreezeLevel und MarginInit steht null.

 
pennyhunter:

Hallo zusammen,

als ich heute eine kleine Spielerei mit einem Trailingstop entwickeln wollte, fiel mir auf, dass SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL) mir keine Zahl liefert.

Da habe ich mich gefragt, ob das womöglich am Broker liegt. Das Problem tritt bei Gold, GBPUSD, EURUSD, S&P500 auf.

Habe jetzt schon mit dem Broker geredet im Hilfechat. Da hieß es, ich solle bei MQL nachfragen.

Hier der abgespeckte SymbolInfoTestBot:

Und hier das Ergebnis:



Bei StopsLevel, FreezeLevel und MarginInit steht null.

Das kann durchaus sein das die 0 sind

schau mal in der symbol spezifikation nach


und margininit liefert immer 0 bei der abfrage, das ist ein alter bug, da musst du über

https://www.mql5.com/en/docs/marketinformation/symbolinfomarginrate

gehen

Documentation on MQL5: Market Info / SymbolInfoMarginRate
Documentation on MQL5: Market Info / SymbolInfoMarginRate
  • www.mql5.com
SymbolInfoMarginRate - Market Info - MQL5 Reference - Reference on algorithmic/automated trading language for MetaTrader 5
 
amando:

Das kann durchaus sein das die 0 sind

Üh das hätte ich nicht gedacht, hab jetzt zwischenzeitlich extra einen kleinen Testbot gebastelt, der zu kaufen versucht, während der StopLoss bei jedem Tick hochgezählt wird und siehe da:

"2021.07.28 20:19:43.912    SymbolMinimumStopLossTestEA01 (GOLD,H1)    The minimum SL has experimentally been determined as 1"

Gerade auf Gold, da gibt es manchmal MinimumStopLoss von etwa 1000 Punkten oder so. Das wundert mich jetzt...

Ja okay danke für die schnelle Antwort.

//+------------------------------------------------------------------+
//|                                        MinimalStopLossSpamTestEA |
//|                                      Copyright 2020, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+

#property strict

#include <Trade\Trade.mqh>

const input double               InpLots=0.01;

const input int SL=0;
const input int TP=10500;

double Ask, Bid;
int StopsLevel, SLUp=SL;
bool TradeStop=false;

CTrade Trade;

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+

void OnTick()
  {
   GetPrices();

   if(PositionsTotal()!=0)
     {
      Print("The minimum SL ",Symbol()," has experimentally been determined as ",SLUp);
      TradeStop=1;
     }

   else
      if((PositionsTotal()==0)&&(TradeStop==false))
        {
         Trade.Buy(InpLots,_Symbol,Ask,Bid-SLUp*_Point,Bid+TP*_Point,NULL);
         SLUp++;
        }

   Comment("\n",
           "\n Positionen: ",PositionsTotal(),
           "\n SLUp: ",SLUp,
           "\n StopsLevel ",StopsLevel
          );

//  Print("***End Positions: ",PositionsTotal());
  }

void GetPrices()

  {
   Ask=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
   Bid=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);
   StopsLevel=SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL);

  }
//+------------------------------------------------------------------+
 
Such einfach hier mal nach SYMBOL_TRADE_STOPS_LEVEL und schau Dir an wie es verwendet wird! Mach ich immer, wenn der Erklärung in der Referenz ein Beispiel fehlt.
Grund der Beschwerde: