Was macht ihr Kinder eigentlich, wenn ihr das Wasser aufwirbelt?
Niemand macht einen Aufstand. Die Situation beginnt sich endlich ein wenig zu klären. Es stellt sich heraus, dass Sie ein Skript eine Funktion nennen, die nicht in den Hauptteil des Codes eingefügt werden kann.
Vergessen Sie auch nicht, dass MT dazu gedacht ist, mit Geld zu arbeiten, das vor den Angriffen Dritter geschützt werden muss. Daraus ergeben sich die meisten Einschränkungen der Sprache.
Niemals:
Ich habe bereits eine einfache Aufgabe beschrieben.
Öffnen Sie MetaEditor.
Klicken Sie auf Datei->Erstellen.
Wählen Sie im Pop-up-Feld Indikator.
In das Feld Indikator OnCalculate() betten Sie ein beliebiges Skriptobjekt mit dem Ereignis OnStart() ein.
Ich persönlich weiß nicht, wie man das macht. Nun, zum Beispiel so:
int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &Volumen[], const int &spread[]) { //--- for(int i = 1; i < 100;i++)
{
if(offen[i] > Max)
{
OnStart()
Und hier schreiben wir ein Skript für die Erstellung des Objekts, das uns interessiert. Zum Beispiel eine Ellipse oder ein Buchstabe in einer Tabelle oder etwas anderes
} //if(offen)
} //for(int i) //--- Rückgabewert von prev_calculated für den nächsten Aufruf return(raten_gesamtsumme) } // OnCalculate
Das sollte in etwa so aussehen.
Aber der MQL-Übersetzer nimmt einen solchen Code nicht wahr.
Sie sollte in etwa so aussehen
intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//---for(int i = 1; i < 100;i++)
{
if(open[i] > Max)
{
if(intObjectFind(chart_id, /* идентификатор графика*/ object_name/* имя объекта*/) < 0)
ObjectCreate(Здесь параметры функции согласно документации.
Например, эллипса, или буквы на графике, или еще чего-нибудь);
} //if(open)
} //for(int i) //--- return value of prev_calculated for next callreturn(rates_total);
} // OnCalculate
Es hat lange gedauert, das Video hochzuladen - über 40 Minuten.
//+------------------------------------------------------------------+//| Set.mq5 |//| Copyright 2018 |//+------------------------------------------------------------------+#property copyright"Copyright 2018"#property version"1.00"#property indicator_chart_window#property indicator_plots0//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
EllipseCreate(0, "Ellipse", 0, 0, 0, 0, 0, 0, 0, clrRed, STYLE_SOLID, 1, true, true);
//--- indicator buffers mappingreturn(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//---ArraySetAsSeries(time,true);
ArraySetAsSeries(open,true);
// ....ObjectMove(0, "Ellipse",0,time[1],open[5]);
ObjectMove(0, "Ellipse",1,time[10],open[15]);
ObjectMove(0, "Ellipse",2,time[20],open[25]);
//--- return value of prev_calculated for next callreturn(rates_total);
}
//+------------------------------------------------------------------+bool EllipseCreate(constlong chart_ID=0, // ID графика conststring name="Ellipse", // имя эллипса constint sub_window=0, // номер подокна datetime time1=0, // время первой точки double price1=0, // цена первой точки datetime time2=0, // время второй точки double price2=0, // цена второй точки datetime time3=0, // время третьей точки double price3=0, // цена третьей точки constcolor clr=clrRed, // цвет эллипса constENUM_LINE_STYLE style=STYLE_SOLID, // стиль линий эллипса constint width=1, // толщина линий эллипса constbool fill=false, // заливка эллипса цветом constbool back=false, // на заднем плане constbool selection=true, // выделить для перемещений constbool hidden=true, // скрыт в списке объектов constlong z_order=0) // приоритет на нажатие мышью
{
//--- установим координаты точек привязки, если они не заданы // ChangeEllipseEmptyPoints(time1,price1,time2,price2,time3,price3); //--- сбросим значение ошибки ResetLastError();
//--- создадим эллипс по заданным координатам if(!ObjectCreate(chart_ID,name,OBJ_ELLIPSE,sub_window,time1,price1,time2,price2,time3,price3))
{
Print(__FUNCTION__,
": не удалось создать эллипс! Код ошибки = ",GetLastError());
return(false);
}
//--- установим цвет эллипса ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- установим стиль линий эллипса ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- установим толщину линий эллипса ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- включим (true) или отключим (false) режим заливки эллипса ObjectSetInteger(chart_ID,name,OBJPROP_FILL,fill);
//--- отобразим на переднем (false) или заднем (true) плане ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- включим (true) или отключим (false) режим выделения эллипса для перемещений //--- при создании графического объекта функцией ObjectCreate, по умолчанию объект //--- нельзя выделить и перемещать. Внутри же этого метода параметр selection //--- по умолчанию равен true, что позволяет выделять и перемещать этот объект ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- установим приоритет на получение события нажатия мыши на графике ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- успешное выполнение return(true);
}
Wir sind an den ersten drei Punkten interessiert: Expert Advisor, Custom Indicator und Script.
Vergleichen wir diese Dummies:
In Expert Advisor haben wir Ereignisse:
-OnInit(), OnDeinit(), OnTick(), OnTimer, OnChartEvent() ... alles, nicht mehr.
Im Skript gibt es die Ereignisse:
- OnStart() ... das war's, mehr nicht.
im Indikator haben wir Ereignisse:
- OnInit(), OnCalculate(), OnTimer, OnChartEvent() ... alles, nicht mehr.
Hier stellt sich natürlich die Frage, wie die Verbindung zwischen diesen Objekten hergestellt werden kann.
Es stellt sich heraus, dass es in MQL keine Verbindung zwischen ihnen gibt und geben kann, da die Datenströme zwischen diesen Objekten vollständig getrennt sind und es keine Verbindung zwischen ihnen gibt.
Außerdem bin ich überrascht, dass die Macher von MQL uns diese Tatsache als "gut" verkaufen.
Und wenn ich zum Beispiel in C++ den BASIC-Übersetzer oder Javascript oder irgendeinen anderen Übersetzer aufrufe und z. B. zur Android-Programmierumgebung wechsle,
im Rahmen von MQL kann ich nicht einmal ein sogenanntes "Skript" in der "Indikator"-Umgebung erstellen, da die Indikator-Umgebung den Befehl OnStart() nicht akzeptiert.
Was ist das für ein Freak?
Und von solchen hässlichen Dingen gibt es in MQL mehr als genug.
Sie sind bei jedem Schritt dabei.
Ich habe die Beschreibung von MQL gelesen - und ich bin überrascht, denn es gibt nichts anderes zu tun.
Die ganze Zeit über verkünden die Macher von MQL lautstark, dass MQL ein Nachkomme von C++ ist.
Es tut mir natürlich leid, aber ich möchte die MMS-Ersteller fragen: - Erbe wovon? - In seiner Hässlichkeit?
Ich vergleiche MQL ungewollt mit der berühmten 1C-Programmierumgebung. Sie behaupten auch, die Erben von C++ zu sein.
Aber dort wird alles auf eine viel anständigere Weise gemacht.
Und die grafischen Objekte, die Kommunikation zwischen Modulen und vieles mehr.
Und was gibt es in MQL?
Keine eingebauten Klassen, keine threadbezogenen Objekte... und überhaupt nichts.
Und ich habe nichts über die mathematische Hülle des Terminals gesagt!!!
Das ist ein ganz anderes Thema für Überraschungen!!!
Warum liest du nicht einfach ein bisschen Hilfe und findest all die Dinge, von denen du sagst, dass es sie nicht gibt, liest über eingebaute Klassen in SB, lernst, wie man höflich um Hilfe bittet (du hast um Hilfe gebeten) und lernst, wie man nicht unhöflich zu Leuten ist, die versuchen, dir zu helfen (beachte dies desinteressiert)...
In der Regel - verbieten Sie für 24 Stunden für Trolling, Unhöflichkeit und Betteln (Sie haben nicht eine Zeile Ihres Codes gezeigt, um alle Ihre Aussagen zu beweisen, aber unverschämt verlangen, dass Menschen, die auf Ihre Frage und Aussagen geantwortet haben, werden sie Ihnen mit Arbeits-Code für Ihre Bedürfnisse - es ist nicht üblich, hier - sie helfen, nicht für Sie tun, beachten Sie - die einfachste Code)
Nichts für ungut - wer mit nichts zu uns kommt, wird durch etwas Unverständliches getötet.
Außerdem habe ich Sie gewarnt, die Heizung herunterzudrehen:
Можно запустить Windows параллельно с macOS® (перезагрузка не требуется) на компьютерах MacBook®, MacBook Pro®, iMac®, iMac Pro®, Mac mini® или Mac Pro®. Предоставляйте общий доступ к файлам и папкам, копируйте и вставляйте текст и изображения, перетаскивайте файлы между приложениями Mac и Windows. Удобная настройка Parallels Desktop...
Die einfachste Aufgabe habe ich bereits beschrieben.
Öffnen Sie MetaEditor.
Klicken Sie auf Datei->Erstellen.
Wählen Sie im Pop-up-Feld Indikator.
...
Aber dieser Code wird vom MQL-Übersetzer nicht akzeptiert.
Ich werde in etwa 20 Minuten antworten
Was macht ihr Kinder eigentlich, wenn ihr das Wasser aufwirbelt?
Niemand macht einen Aufstand. Die Situation beginnt sich endlich ein wenig zu klären. Es stellt sich heraus, dass Sie ein Skript eine Funktion nennen, die nicht in den Hauptteil des Codes eingefügt werden kann.
Vergessen Sie auch nicht, dass MT dazu gedacht ist, mit Geld zu arbeiten, das vor den Angriffen Dritter geschützt werden muss. Daraus ergeben sich die meisten Einschränkungen der Sprache.
Ich habe bereits eine einfache Aufgabe beschrieben.
Öffnen Sie MetaEditor.
Klicken Sie auf Datei->Erstellen.
Wählen Sie im Pop-up-Feld Indikator.
In das Feld Indikator OnCalculate() betten Sie ein beliebiges Skriptobjekt mit dem Ereignis OnStart() ein.
Ich persönlich weiß nicht, wie man das macht. Nun, zum Beispiel so:
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &Volumen[],
const int &spread[])
{
//---
for(int i = 1; i < 100;i++)
{
if(offen[i] > Max)
{
OnStart()
Und hier schreiben wir ein Skript für die Erstellung des Objekts, das uns interessiert. Zum Beispiel eine Ellipse oder ein Buchstabe in einer Tabelle oder etwas anderes
} //if(offen)
} //for(int i)
//--- Rückgabewert von prev_calculated für den nächsten Aufruf
return(raten_gesamtsumme)
} // OnCalculate
Das sollte in etwa so aussehen.
Aber der MQL-Übersetzer nimmt einen solchen Code nicht wahr.
Sie sollte in etwa so aussehen
In etwa 20 Minuten werde ich antworten.
Es hat lange gedauert, das Video hochzuladen - über 40 Minuten.
Es dauerte lange, bis das Video geladen war - mehr als 40 Minuten.
Manchmal vermische ich auch die Forenbereiche und schreibe eine Antwort auf eine Frage zu mql4 in mql5.
Im Prinzip ändert sich in diesem Fall nichts außer der Dateierweiterung, aber in mql4 wird sie überflüssig
und sogar völlig unnötig und nutzlos.
Was macht ihr Kinder eigentlich, wenn ihr das Wasser aufwirbelt?
Gehen Sie einfach in den MetaEditor, und geben Sie den Befehl ein: Datei->Erstellen...
Daraufhin wird ein Formular mit verschiedenen Dummy-Dateien angezeigt.
Dabei handelt es sich vor allem um die Dongles:
- Expert Advisor
- Benutzerdefinierter Indikator
- Skript
- Bibliothek, etc.
Wir sind an den ersten drei Punkten interessiert: Expert Advisor, Custom Indicator und Script.
Vergleichen wir diese Dummies:
In Expert Advisor haben wir Ereignisse:
-OnInit(), OnDeinit(), OnTick(), OnTimer, OnChartEvent() ... alles, nicht mehr.
Im Skript gibt es die Ereignisse:
- OnStart() ... das war's, mehr nicht.
im Indikator haben wir Ereignisse:
- OnInit(), OnCalculate(), OnTimer, OnChartEvent() ... alles, nicht mehr.
Hier stellt sich natürlich die Frage, wie die Verbindung zwischen diesen Objekten hergestellt werden kann.
Es stellt sich heraus, dass es in MQL keine Verbindung zwischen ihnen gibt und geben kann, da die Datenströme zwischen diesen Objekten vollständig getrennt sind und es keine Verbindung zwischen ihnen gibt.
Außerdem bin ich überrascht, dass die Macher von MQL uns diese Tatsache als "gut" verkaufen.
Und wenn ich zum Beispiel in C++ den BASIC-Übersetzer oder Javascript oder irgendeinen anderen Übersetzer aufrufe und z. B. zur Android-Programmierumgebung wechsle,
im Rahmen von MQL kann ich nicht einmal ein sogenanntes "Skript" in der "Indikator"-Umgebung erstellen, da die Indikator-Umgebung den Befehl OnStart() nicht akzeptiert.
Was ist das für ein Freak?
Und von solchen hässlichen Dingen gibt es in MQL mehr als genug.
Sie sind bei jedem Schritt dabei.
Ich habe die Beschreibung von MQL gelesen - und ich bin überrascht, denn es gibt nichts anderes zu tun.
Die ganze Zeit über verkünden die Macher von MQL lautstark, dass MQL ein Nachkomme von C++ ist.
Es tut mir natürlich leid, aber ich möchte die MMS-Ersteller fragen: - Erbe wovon? - In seiner Hässlichkeit?
Ich vergleiche MQL ungewollt mit der berühmten 1C-Programmierumgebung. Sie behaupten auch, die Erben von C++ zu sein.
Aber dort wird alles auf eine viel anständigere Weise gemacht.
Und die grafischen Objekte, die Kommunikation zwischen Modulen und vieles mehr.
Und was gibt es in MQL?
Keine eingebauten Klassen, keine threadbezogenen Objekte... und überhaupt nichts.
Und ich habe nichts über die mathematische Hülle des Terminals gesagt!!!
Das ist ein ganz anderes Thema für Überraschungen!!!
Warum liest du nicht einfach ein bisschen Hilfe und findest all die Dinge, von denen du sagst, dass es sie nicht gibt, liest über eingebaute Klassen in SB, lernst, wie man höflich um Hilfe bittet (du hast um Hilfe gebeten) und lernst, wie man nicht unhöflich zu Leuten ist, die versuchen, dir zu helfen (beachte dies desinteressiert)...
In der Regel - verbieten Sie für 24 Stunden für Trolling, Unhöflichkeit und Betteln (Sie haben nicht eine Zeile Ihres Codes gezeigt, um alle Ihre Aussagen zu beweisen, aber unverschämt verlangen, dass Menschen, die auf Ihre Frage und Aussagen geantwortet haben, werden sie Ihnen mit Arbeits-Code für Ihre Bedürfnisse - es ist nicht üblich, hier - sie helfen, nicht für Sie tun, beachten Sie - die einfachste Code)
Nichts für ungut - wer mit nichts zu uns kommt, wird durch etwas Unverständliches getötet.
Außerdem habe ich Sie gewarnt, die Heizung herunterzudrehen:
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
Alle Fragen von Anfängern zu MQL4, Hilfe und Diskussion über Algorithmen und Codes
Artyom Trishkin, 2018.09.12 14:02
Versuchen Sie es jetzt ohne Beleidigungen und Arroganz.Wie installiert man mt4 auf macOS? Hilfe bitte!
Ausschließlich in einer virtuellen Maschine. Ich habe Parallel's teuer, aber bequem und zuverlässig.
https://www.parallels.com/ru/products/desktop/
Ich bitte um Hilfe. Die Fragen lauten:
1. Das Programm setzt im Testmodus keine Stop Losses für Kauf und Verkauf. Aber die Änderung anstehender Aufträge geht gut.
2. Es wird nicht in Echtzeit auf Rechnung gestartet.
Bitte, helfen Sie.
Ich möchte auch darum bitten, auf eventuelle Fehler hinzuweisen, die beim Schreiben des Programms aufgetreten sind.
Vielen Dank im Voraus.
Programm-Code:
.input int Percent=50;
Eingabe int MAGICNUMBER=413;
//Einführung von Indikatorkonstanten und Oszillatoren für die langfristigen Charts
input int Signal_Period_long_term=6;
Eingabe int Fast_EMA_Period_long_term=12;
Eingabe int Slow_EMA_Period_long_term=24;
//Wirkungsparameter von Indikatoren und Oszillator-Konstanten für kurzfristige Charts
input int Stochastic_Kperiod_short_term=5;
input int Stochastic_Dperiod_short_term=3;
input int Stochastic_slowing_short_term=3;
input ENUM_TIMEFRAMES PERIODs_short_term=PERIOD_M5;
input ENUM_TIMEFRAMES PERIODs_long_term=PERIOD_H1;
//-----------------------------------------------------------------------------------------
//Gemeinsame Variablen und ihre Typen
static datetime New_Time;//Zeit des aktuellen Taktes
statisch datetime Time_Local;
double Margin_Percent; //Eröffnungsmittel für die Eröffnung von Aufträgen
double Lots;//Bestimmung der Gesamtzahl der Lose
double Lots_Volumen;
//Variablen und Typen für das Langzeitdiagramm
double MacdCurrent_long_term;//MACD-Parameter der Hauptlinie des aktuellen Balkens
double MacdPrevious_long_term;//MACD-Parameter der Hauptlinie des vorherigen Balkens
double SignalCurrent_long_term;
//Variablen und Typen für den kurzfristigen Chart
double Stochastic_Current_short_term_main;//Stochastische Parameter des aktuellen Balkens im 5-Minuten-Chart
double Stochastic_Previous_short_term_main;//Stochastische Parameter des vorherigen Balkens im 5-Minuten-Chart
double Stochastic_Current_short_term_signal;//Stochastische Parameter des aktuellen Balkens im 5-Minuten-Chart
double Stochastic_Previous_short_term_signal;//Stochastische Parameter des vorherigen Balkens im 5-Minuten-Chart
double StopLoss_BUY;
double StopLoss_SELL;
double Price_BUY;
double Price_SELL;
//+------------------------------------------------------------------+
Experteninitialisierungsfunktion //|
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Experten-Deinitialisierungsfunktion |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Experten-Tick-Funktion |
//+------------------------------------------------------------------+
void OnTick()
{
int ticket,cnt;
int total=OrdersTotal();// Ermittlung der Anzahl der Bestellungen
bool New_Bar=false; // Neuen Balken markieren
//Definieren der Variablenwerte für das Langzeitdiagramm
MacdCurrent_long_term=iMACD(NULL,PERIODs_long_term,Fast_EMA_Period_long_term,Slow_EMA_Period_long_term,Signal_Period_long_term,PRICE_TYPICAL,MODE_MAIN,1);
MacdPrevious_long_term=iMACD(NULL,PERIODs_long_term,Fast_EMA_Period_long_term,Slow_EMA_Period_long_term,Signal_Period_long_term,PRICE_TYPICAL,MODE_MAIN,2);
SignalCurrent_long_term=iMACD(NULL,PERIODs_long_term,Fast_EMA_Period_long_term,Slow_EMA_Period_long_term,Signal_Period_long_term,PRICE_TYPICAL,MODE_SIGNAL,1);
//Bestimmung der Variablenwerte für das Kurzzeitdiagramm
Stochastic_Current_short_term_main=iStochastic(NULL,PERIODs_short_term,Stochastic_Kperiod_short_term,Stochastic_Dperiod_short_term,Stochastic_slowing_short_term,MODE_SMA,0,MODE_MAIN,1);
Stochastic_Previous_short_term_main=iStochastic(NULL,PERIODs_short_term,Stochastic_Kperiod_short_term,Stochastic_Dperiod_short_term,Stochastic_slowing_short_term,MODE_SMA,0,MODE_MAIN,2);
Stochastic_Current_short_term_signal=iStochastic(NULL,PERIODs_short_term,Stochastic_Kperiod_short_term,Stochastic_Dperiod_short_term,Stochastic_slowing_short_term,MODE_SMA,0,MODE_SIGNAL,1);
Stochastic_Previous_short_term_signal=iStochastic(NULL,PERIODs_short_term,Stochastic_Kperiod_short_term,Stochastic_Dperiod_short_term,Stochastic_slowing_short_term,MODE_SMA,0,MODE_SIGNAL,2);
//Definition der gemeinsamen Variablen
Price_BUY=iHigh(NULL,PERIODs_short_term,1)+MarketInfo(NULL,MODE_STOPLEVEL)*MarketInfo(NULL,MODE_POINT);
Price_SELL=iLow(NULL,PERIODs_short_term,1)-MarketInfo(NULL,MODE_STOPLEVEL)*MarketInfo(NULL,MODE_POINT);
StopLoss_BUY=iLow(NULL,PERIODs_short_term,1)-MarketInfo(NULL,MODE_STOPLEVEL)*MarketInfo(NULL,MODE_POINT);
StopLoss_SELL=iHigh(NULL,PERIODs_short_term,1)+MarketInfo(NULL,MODE_STOPLEVEL)*MarketInfo(NULL,MODE_POINT);
Margin_Percent=AccountFreeMargin()*Percent/100;
Lots=NormalizeDouble(Margin_Percent/MarketInfo(Symbol(),MODE_MARGINREQUIRED),2);
Lots_Volume=NormalizeDouble(MathFloor(Lots)+MarketInfo(Symbol(),MODE_LOTSTEP),2);
//-----------------------------------------------------------------------------------------------------------------------
//----- Определение нового бара------------------------------------------------------------------------------------------
New_Time=TimeCurrent();
Print("Time=",TimeCurrent();
Print("Bar open time =",iTime(NULL,PERIODs_short_term,0));
if(iTime(NULL,PERIODs_short_term,0)==New_Time) // Zeiten vergleichen
{
if(iVolume(NULL,PERIODs_short_term,0)<=2) //Volumen vergleichen
Print("Bar Volumen =",Volumen[0]);
if(iBarShift(NULL,PERIODs_short_term,TimeCurrent())==0)//Prüfen des Balkenindex
Print("Balkenindex =",iBarShift(NULL,PERIODs_short_term,TimeCurrent());
New_Bar=true; // Ein neuer Balken wird erfasst
Print("Neuer_Balken");
}
else if(Neuer_Balken==false) // Wenn der Balken nicht neu ist...
{
Print("Bar ist nicht neu");
Rückkehr;
}
//---Prüfung der Verfügbarkeit von Mitteln für die Eröffnung der Mindestpartie
if(Margin_Percent<MarketInfo(Symbol(),MODE_MARGINREQUIRED)*(MarketInfo(Symbol(),MODE_MINLOT))
{
Print("Nicht genügend Mittel. Freie Mittel = ",AccountFreeMargin());
Rückkehr;
}
//---Bestimmung der Losnummer
if(Lose>Lose_Volumen)
{
Lots=NormalizeDouble(Lots_Volume,2);
Print("Anzahl der Lose : ",Lose);
}
sonst if(Lose<Lose_Volumen)
{
Lots=NormalizeDouble(MathFloor(Lots),2);
Print("Anzahl der Lose : ",Lose);
}
//+------------------------------------------------------------------+
//| Bedingungen für die Eröffnung von Aufträgen, wenn die Anzahl der Aufträge gleich Null ist |
//+------------------------------------------------------------------+
if(gesamt<1)
{
if(MacdCurrent_long_term<0 && MacdCurrent_long_term>SignalCurrent_long_term)
Print("Bedingung ist wahr für KAUFEN");
{
//+---------------------------------------------------------------------------+
//| Bedingung für die Eröffnung einer langen BUY-Position |
//+---------------------------------------------------------------------------+
if(Stochastic_Current_short_term_main<Stochastic_Current_short_term_signal && Stochastic_Previous_short_term_main>=Stochastic_Previous_short_term_signal)
{
ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Price_BUY,3,0,0,NULL,MAGICNUMBER,0,Blue);
if(ticket>0)///geöffnete Position prüfen
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
{
Print("BUY order open : ",OrderOpenPrice());
Rückkehr;
}
else Print("BUY order open error : ",GetLastError());
Rückkehr;
}
}
}
if(MacdCurrent_long_term>0 && MacdCurrent_long_term<SignalCurrent_long_term)
Print("Bedingung ist wahr für SELL");
{
//+---------------------------------------------------------------------------+
//| Bedingung für die Eröffnung von Short-SELL-Positionen |
//+---------------------------------------------------------------------------+
if(Stochastic_Current_short_term_main>Stochastic_Current_short_term_signal && Stochastic_Previous_short_term_main<=Stochastic_Previous_short_term_signal)
{
ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,Price_SELL,3,0,0,NULL,MAGICNUMBER,0,Green);
if(ticket>0)///geöffnete Position prüfen
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
{
Print("SELL order open : ",OrderOpenPrice());
Rückkehr;
}
else Print("Fehler bei der Eröffnung einer SELL-Order: ",GetLastError());
Rückkehr;
}
}
}
}
//+---------------------------------------------------------------------------+
//| Änderungsbedingungen für die Bestellung |
//+---------------------------------------------------------------------------+
for(cnt=0;cnt<Gesamt;cnt++)
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
{
if(!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
weiter;
if(OrderMagicNumber()==MAGICNUMBER && // Überprüfung der magischen Nummer der Bestellung
OrderSymbol()==Symbol()) // Prüfung auf das Order-Symbol
{
//--- Long-Position eröffnet
if(Auftragsart()==OP_BUYSTOP)
{
if(OrderOpenPrice()<Preis_BUY && Ask<Preis_BUY)
{
if(OrderModify(OrderTicket(),Price_BUY,0,0,0,Blue))
Print("Die Preis_BUY-Bestellung wurde erfolgreich geändert.");
else Print("Fehler beim Ändern der BUYStop-Order. Fehlercode=",GetLastError());
Rückkehr;
}
else Print("Der Änderungspreis ist höher als der Auftragspreis");
Rückkehr;
}
if(OrderType()==OP_SELLSTOP)
{
if(OrderOpenPrice()<Price_SELL && Bid>Price_SELL)
{
if(OrderModify(OrderTicket(),Price_SELL,0,0,0,Green))
Print("Preis_Verkaufsauftrag wurde erfolgreich geändert.");
else Print("Fehler beim Ändern der Order SELLStop. Fehlercode=",GetLastError();
Rückkehr;
}
}
if(Auftragsart()==OP_BUY)
{
if(OrderStopLoss()<StopLoss_BUY && StopLoss_BUY<Ask)
{
if(OrderModify(OrderTicket(),OrderOpenPrice(),StopLoss_BUY,0,0,Blue))
Print("Preis_BUY Bestellpreis erfolgreich geändert.");
else Print("Fehler beim Ändern der BUY-Bestellung. Fehlercode=",GetLastError());
Rückkehr;
}
}
if(OrderType()==OP_SELL)
{
if(OrderStopLoss()>StopLoss_SELL && StopLoss_SELL>Bid)
{
if(OrderModify(OrderTicket(),OrderOpenPrice(),StopLoss_SELL,0,0,Green))
Print("Preis_Verkaufsauftragspreis erfolgreich geändert.");
else Print("Fehler beim Ändern des SELL-Auftrags. Fehlercode=",GetLastError();
Rückkehr;
}
}
}
}
}
//+------------------------------------------------------------------+
Hilfe bei der Behebung eines Fehlers im Indikator, er zeichnet nicht das Tageshoch und -tief, wenn er sich auf der letzten Kerze der Stunde befindet.
https://prnt.sc/kut6xo
https://prnt.sc/kut79b
Ich bitte um Hilfe. Die Fragen lauten:
1. Das Programm setzt im Testmodus keine Stop Losses für Kauf und Verkauf. Aber die Änderung anhängiger Aufträge geht gut.
2. Es wird nicht in Echtzeit auf Rechnung gestartet.
Dies ist der Weg
ändert den AND-Code und fügt ihn korrekt ein (Alt+S).