Diese Funktion schreibt eine Nummer auf jede Bestellung, bzw. Los*100.
Jetzt brauchen wir eine Umkehrfunktion, die anzeigt, was die letzte Zahl war
Versuchen Sie es:
double value = StringToDouble(ObjectGetString(0,object_name,OBJPROP_TEXT));
Wenn das Objekt Text (nicht numerisch) enthält, müssen Sie StringSubstr() hinzufügen:
double value = StringToDouble( StringSubstr(ObjectGetString(0,object_name,OBJPROP_TEXT),begin_index,length));
begin_index - Index des Zeichens in der Zeichenkette, beginnend bei Null, length - Länge des numerischen Wertes (wie viele Zeichen die Zahl einnimmt)... Ich denke schon.
Wenn das Objekt Text (nicht numerisch) enthält, fügen Sie StringSubstr() hinzu:
begin_index - Index des Zeichens in der Zeichenkette, beginnend bei Null, length - Länge des numerischen Wertes (wie viele Zeichen die Zahl einnimmt)... Ich denke schon.
Nun, zunächst müssten Sie alle diese Zahlen in der Grafik suchen. So funktioniert es einfach nicht. Das ist das Problem, ich habe es bereits überprüft.
Wenn das Objekt Text (nicht numerisch) enthält, fügen Sie StringSubstr() hinzu:
begin_index - Index des Zeichens in der Zeichenkette, beginnend bei Null, length - Länge des numerischen Wertes (wie viele Zeichen die Zahl einnimmt)... Ich denke schon.
Wie dieses, aber es funktioniert nicht, es zeigt Null an.
Möchten Sie einen Wert festlegen oder einen Wert übernehmen? Die Funktion ObjectSetString()setzt einen Textwert und gibt einen boolschen Wert zurück. Das ist nicht der Fall. Und in der Schleife Kopf Ich denke, es ist nicht die richtige... Wo ObjectsTotal()... Ich bin von mt4 Referenz geführt. Oder ist es ein mt5-Code?
Müssen Sie einen Wert festlegen oder einen Wert übernehmen? Die Funktion ObjectSetString()setzt einen Textwert und gibt einen boolschen Wert zurück. Das ist nicht der Fall. Und im Schleifenkopf ist es, glaube ich, nicht richtig eingerahmt, wo ObjectsTotal() ist. Ich bin von mt4 Referenz geführt. Oder ist es ein mt5-Code?
Hier ist ein Teil des Skriptcodes für Metatrader5:
#property copyright"Copyright 2019, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"//---- показывать входные параметры#property script_show_inputs//---#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>
CTrade m_trade; // trading object
CSymbolInfo m_symbol; // symbol info object//+------------------------------------------------------------------+//| Enum Stop or Limit |//+------------------------------------------------------------------+enum ENUM_STOP_OR_LIMIT
{
stop=0, // Buy stop and Sell stop
limit=1// Buy limit and Sell limit
};
//--- input parametersinputushort InpUpGap = 15; // Gap for pending orders UP from the current price (in points)inputushort InpUpStep = 30; // Step between orders UP (in points)inputushort InpDownGap = 15; // Gap for pending orders DOWN from the current price (in points)inputushort InpDownStep = 30; // Step between orders DOWN (in points)input ENUM_STOP_OR_LIMIT InpPending = stop; // Type of pending ordersinputuchar InpUpQuantity = 1; // UP quantity ordersinputuchar InpDownQuantity = 1; // DOWN quantity ordersinputdouble InpLots = 0.01; // Lotsinputushort InpStopLoss = 50; // Stop Loss (in points)inputushort InpTakeProfit = 50; // Take Profit (in points)//---ulong m_slippage=30; // slippagedouble ExtUpGap=0.0;
double ExtUpStep=0.0;
double ExtDownGap=0.0;
double ExtDownStep=0.0;
double ExtStopLoss=0.0;
double ExtTakeProfit=0.0;
//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
//---if(InpLots<=0.0)
{
Print("The \"Lots\" can't be smaller or equal to zero");
return;
}
//---if(!m_symbol.Name(Symbol())) // sets symbol namereturn;
if(!RefreshRates())
return;
string err_text="";
if(!CheckVolumeValue(InpLots,err_text))
{
Print(err_text);
return;
}
//---if(IsFillingTypeAllowed(SYMBOL_FILLING_FOK))
m_trade.SetTypeFilling(ORDER_FILLING_FOK);
elseif(IsFillingTypeAllowed(SYMBOL_FILLING_IOC))
m_trade.SetTypeFilling(ORDER_FILLING_IOC);
else
m_trade.SetTypeFilling(ORDER_FILLING_RETURN);
//---
m_trade.SetDeviationInPoints(m_slippage);
m_trade.SetAsyncMode(true);
//---
ExtUpGap = m_symbol.Point() * InpUpGap;
ExtUpStep = m_symbol.Point() * InpUpStep;
ExtDownGap = m_symbol.Point() * InpDownGap;
ExtDownStep = m_symbol.Point() * InpDownStep;
ExtStopLoss = m_symbol.Point() * InpStopLoss;
ExtTakeProfit = m_symbol.Point() * InpTakeProfit;
//--- start workdouble start_price_ask=m_symbol.Ask()-ExtUpGap;
double start_price_bid=m_symbol.Bid()+ExtDownGap;
//--- set pending ordersfor(int i=0; i<InpUpQuantity; i++)
{
double price_ask = start_price_ask+i*ExtUpStep;
double price_bid = start_price_bid+i*ExtUpStep;
if(InpPending==stop)
{
double sl = (ExtStopLoss==0.0) ? 0.0 : price_ask - ExtStopLoss;
double tp = (ExtTakeProfit==0.0) ? 0.0 : price_ask + ExtTakeProfit;
m_trade.BuyStop(InpLots,m_symbol.NormalizePrice(price_ask),m_symbol.Name(),
m_symbol.NormalizePrice(sl),
m_symbol.NormalizePrice(tp));
}
else
{
double sl = (ExtStopLoss==0.0) ? 0.0 : price_bid + ExtStopLoss;
double tp = (ExtTakeProfit==0.0) ? 0.0 : price_bid - ExtTakeProfit;
m_trade.SellLimit(InpLots,m_symbol.NormalizePrice(price_bid),m_symbol.Name(),
m_symbol.NormalizePrice(sl),
m_symbol.NormalizePrice(tp));
}
}
for(int i=0; i<InpDownQuantity; i++)
{
double price_ask = start_price_ask-i*ExtDownStep;
double price_bid = start_price_bid-i*ExtDownStep;
if(InpPending==limit)
{
double sl = (ExtStopLoss==0.0) ? 0.0 : price_ask - ExtStopLoss;
double tp = (ExtTakeProfit==0.0) ? 0.0 : price_ask + ExtTakeProfit;
m_trade.BuyLimit(m_symbol.LotsMin(),m_symbol.NormalizePrice(price_ask),m_symbol.Name(),
m_symbol.NormalizePrice(sl),
m_symbol.NormalizePrice(tp));
}
else
{
double sl = (ExtStopLoss==0.0) ? 0.0 : price_bid + ExtStopLoss;
double tp = (ExtTakeProfit==0.0) ? 0.0 : price_bid - ExtTakeProfit;
m_trade.SellStop(m_symbol.LotsMin(),m_symbol.NormalizePrice(price_bid),m_symbol.Name(),
m_symbol.NormalizePrice(sl),
m_symbol.NormalizePrice(tp));
}
}
}
Das Skript sollte entweder schwebende Limit-Aufträge in einem bestimmten Abstand zum Geld- und Briefkurs oder Stop-Aufträge platzieren. Die schwebenden Limit-Aufträge werden ohne Probleme gesetzt, die Stop-Aufträge jedoch nicht. Bitte helfen Sie mir zu verstehen, warum schwebende Buy Stop- und Sell Stop-Aufträge nicht gesetzt werden.
Mit freundlichen Grüßen, Vladimir.
Nur um eine weitere Frage anzuschließen: Gibt es eine Möglichkeit, das Skript zu testen, wenn der Markt geschlossen ist (z. B. an Wochenenden)?
Niemand hat auf die Frage geantwortet, die ich vorhin gestellt habe, aber ich bitte immer noch um Hilfe mit dem Code.
Eine weitere Frage: Gibt es eine Möglichkeit, das Skript zu testen, wenn der Markt geschlossen ist (z. B. am Wochenende)?
Mit freundlichen Grüßen, Vladimir.
Nein, das Skript funktioniert nicht in einem geschlossenen Markt - es wird keine Aufträge erteilen.
Um die Fehler zu verstehen, drucken Sie in das Protokoll den Wert des Preises, gegen den Sie die Einstellungsebenen berechnen, und die Werte aller Preisniveaus, die Sie an den Handelsauftrag senden.
Sie müssen die letzte Bestellung finden, die geöffnet wurde. Finden Sie das Ticket. Verwenden Sie dann die Liste der Objektnamen, um das Vorkommen einer Teilzeichenkette mit dem gefundenen Ticket der letzten Reihenfolge in der Objektnamenzeile zu finden. Sobald das Ticket der letzten Bestellung im Objektnamen vorkommt, ist dies das notwendige grafische Objekt. Nun müssen Sie nur noch das, was Sie brauchen, aus diesem grafischen Objekt extrahieren.
Diese Funktion schreibt eine Nummer auf jede Bestellung, bzw. Los*100.
Jetzt brauchen wir eine Umkehrfunktion, die anzeigt, was die letzte Zahl war
Versuchen Sie es:
Wenn das Objekt Text (nicht numerisch) enthält, müssen Sie StringSubstr() hinzufügen:
begin_index - Index des Zeichens in der Zeichenkette, beginnend bei Null, length - Länge des numerischen Wertes (wie viele Zeichen die Zahl einnimmt)... Ich denke schon.
Versuchen Sie dies:
Wenn das Objekt Text (nicht numerisch) enthält, fügen Sie StringSubstr() hinzu:
begin_index - Index des Zeichens in der Zeichenkette, beginnend bei Null, length - Länge des numerischen Wertes (wie viele Zeichen die Zahl einnimmt)... Ich denke schon.
Nun, zunächst müssten Sie alle diese Zahlen in der Grafik suchen. So funktioniert es einfach nicht. Das ist das Problem, ich habe es bereits überprüft.
Versuchen Sie dies:
Wenn das Objekt Text (nicht numerisch) enthält, fügen Sie StringSubstr() hinzu:
begin_index - Index des Zeichens in der Zeichenkette, beginnend bei Null, length - Länge des numerischen Wertes (wie viele Zeichen die Zahl einnimmt)... Ich denke schon.
Ähnlich wie dieses, aber es funktioniert nicht. Es zeigt Null an.
Wie dieses, aber es funktioniert nicht, es zeigt Null an.
Möchten Sie einen Wert festlegen oder einen Wert übernehmen? Die Funktion ObjectSetString() setzt einen Textwert und gibt einen boolschen Wert zurück. Das ist nicht der Fall. Und in der Schleife Kopf Ich denke, es ist nicht die richtige... Wo ObjectsTotal()... Ich bin von mt4 Referenz geführt. Oder ist es ein mt5-Code?
Müssen Sie einen Wert festlegen oder einen Wert übernehmen? Die Funktion ObjectSetString() setzt einen Textwert und gibt einen boolschen Wert zurück. Das ist nicht der Fall. Und im Schleifenkopf ist es, glaube ich, nicht richtig eingerahmt, wo ObjectsTotal() ist. Ich bin von mt4 Referenz geführt. Oder ist es ein mt5-Code?
Dies ist MT4.
Nochmals einen schönen Tag an alle!
Ich bin immer noch nicht zufrieden mit der Frage, die ich oben gestellt habe, aber ich bitte um Hilfe mit dem Code.
Dies ist das Forum für Handel, automatisierte Handelssysteme und Strategietests.
Fragen von Neulingen zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes
MrBrooklin, 2019.08.30 14:15
Guten Tag allerseits!!!
Hier ist ein Teil des Skriptcodes für Metatrader5:
Das Skript sollte entweder schwebende Limit-Aufträge in einem bestimmten Abstand zum Geld- und Briefkurs oder Stop-Aufträge platzieren. Die schwebenden Limit-Aufträge werden ohne Probleme gesetzt, die Stop-Aufträge jedoch nicht. Bitte helfen Sie mir zu verstehen, warum schwebende Buy Stop- und Sell Stop-Aufträge nicht gesetzt werden.
Mit freundlichen Grüßen, Vladimir.
Nur um eine weitere Frage anzuschließen: Gibt es eine Möglichkeit, das Skript zu testen, wenn der Markt geschlossen ist (z. B. an Wochenenden)?
Mit freundlichen Grüßen, Vladimir.
Von welcher Liste?
Und benutzen Sie bitte den Styler im Editor (Strg+<):
Was soll woher genommen werden?
Können Sie mir einen Tipp geben?
Nochmals einen schönen Tag an alle!
Niemand hat auf die Frage geantwortet, die ich vorhin gestellt habe, aber ich bitte immer noch um Hilfe mit dem Code.
Eine weitere Frage: Gibt es eine Möglichkeit, das Skript zu testen, wenn der Markt geschlossen ist (z. B. am Wochenende)?
Mit freundlichen Grüßen, Vladimir.
Nein, das Skript funktioniert nicht in einem geschlossenen Markt - es wird keine Aufträge erteilen.
Um die Fehler zu verstehen, drucken Sie in das Protokoll den Wert des Preises, gegen den Sie die Einstellungsebenen berechnen, und die Werte aller Preisniveaus, die Sie an den Handelsauftrag senden.
Können Sie mir einen Tipp geben?
Sie müssen die letzte Bestellung finden, die geöffnet wurde. Finden Sie das Ticket. Verwenden Sie dann die Liste der Objektnamen, um das Vorkommen einer Teilzeichenkette mit dem gefundenen Ticket der letzten Reihenfolge in der Objektnamenzeile zu finden. Sobald das Ticket der letzten Bestellung im Objektnamen vorkommt, ist dies das notwendige grafische Objekt. Nun müssen Sie nur noch das, was Sie brauchen, aus diesem grafischen Objekt extrahieren.