Ausgehend von zwei Punkten auf einer Linie können Sie den Preis eines beliebigen dritten Punktes auf dieser Linie, auch in der Zukunft, ermitteln (und umgekehrt).
Ich danke Ihnen! Ich werde es versuchen.
P.S. Die einzige Sache. Das verstehe ich auf den ersten Blick nicht. Wird es im Expert Advisor in MT4 funktionieren?
Hallo, liebe Experten. Ich brauche Ihre Hilfe, um den Indikator zu korrigieren. Das Wesen des Indikators ist wie folgt. Berechnen Sie den Wert des Preisanstiegs im Vergleich zum vorherigen Balken. Für Null nimmt einen Stern bar. Das heißt, der Eröffnungskurs ist gleich dem Schlusskurs. Beim Kompilieren keine Fehler, aber beim Testen ein Fehler in der Zeile 80 20 Zeichen. Auch die Signalleitung ist falsch gezeichnet. Aber ich denke, das ist der Grund für die falsche Berechnung des Hauptpuffers. Bitte helfen Sie mir, das Problem zu beheben.
Es macht Trades auf RSI-Signale von 30 und 70 Ebenen in die entsprechende Richtung, erstellt ein Raster.
Ich habe eine Art Stop-Loss-Prozentsatz, aber von Zeit zu Zeit bleiben Aufträge hängen und werden nicht geschlossen, bis ich sie manuell schließe oder bis ich das Depot verkaufe.
D.h. die Orders sind eröffnet, der Preis ist bereits um 5000 Pips und mehr weg, aber sie hängen immer noch im roten Bereich.
Sie müssen den Fehler finden. Wenn dies nicht möglich ist, sollten wir einen separaten Stop Loss in Pips in unseren EA einfügen.
Ich habe versucht, 2 EAs zu einem zu kombinieren, aber das hat mit meinen Fähigkeiten nicht funktioniert.
Get a unique domain name plus our FREE value-added services to help you get the most from it. Call it a "dot-com name," a URL, or a domain. Whatever you call it, it's the cornerstone of your online presence, and we make getting one easy. Simply enter the name you want in the search field above, and we'll tell you instantly whether the name is...
Hallo noch mal. Bitte achten Sie auf die Frage eines Neulings. Ich muss auf Fehler im Code hinweisen, denn im Tester öffnet der Expert Advisor keine Aufträge... Der Compiler zeigt keine Fehler oder Warnungen an, das gleiche Journal zeigt keine Fehler...
Frage: Warum berechnet und zeigt mql5 einen mir unbekannten Ausdruck wie 2.99999999 - (minus) 05 anstelle der Differenz zwischen dem aktuellen Preis und dem Wert der Hay-Variable, die <1 sein sollte (wie in mql4)?
Wie kann ich mql5 dazu bringen, die Differenz zwischen diesen Werten korrekt zu berechnen? Ich normalisiere alle Werte mit NormalizeDouble(), aber die oben genannten Werte
Werte werden unverändert angezeigt. Dies ist für mich seltsam, da beide Werte vom doppelten Typ sind
Ich danke Ihnen allen für Ihre Hilfe.
#include <Trade\Trade.mqh>
int tm, s1 ;
double P=SymbolInfoDouble(Symbol(),SYMBOL_BID),S=P+0.0030,T=P-0.0010,Lou,Hay,DL=0.0030;
CTrade m_Trade; //структура для выполнения торговых операций//=============================================================================================================voidOnTick()
{
Print("===============",SymbolInfoDouble(Symbol(),SYMBOL_BID) - Hay,"===Hay====",Hay,"===SymbolInfoDouble()====",SymbolInfoDouble(Symbol(),SYMBOL_BID));
m_Trade.Sell(0.1,Symbol(),P,S,T);
Hay=SymbolInfoDouble(Symbol(),SYMBOL_BID);
}
Hallo Ivan, niemand schimpft hier über Neulinge, im Gegenteil, sie versuchen zu helfen. Ich bin selbst ein Anfänger. Nun zu Ihrer Frage. Mehrere Positionen werden geöffnet, weil die Prüfung zur Öffnung einer Position durchgeführt wurde, aber vergessen wurde, die Prüfung zu beenden. Der Operator return gibt die Kontrolle an das aufrufende Programm zurück (aus der MQL5-Referenz).
Wir müssen dem Code des Expert Advisors Return hinzufügen (gelb hervorgehoben):
Um zu verhindern, dass der Compiler Warnungen erzeugt, sollte außerdem eine weitere Bedingung in die Eröffnungsbedingungen für die Kauf- und Verkaufspositionen aufgenommen werden, um OrderSend(mrequest,mresult) zu prüfen. Diese Bedingung wird durch den if-Operator definiert und sollte wie folgt aussehen
Eine weitere Sache sollte berücksichtigt werden. Manchmal wird beim Übergang von einem Handelstag zum anderen um 23:59:59 Uhr eine eröffnete Position geschlossen und dann um 00:00:00 Uhr eine neue Position eröffnet. Dabei handelt es sich um den so genannten Rollover-Close und Rollover-Open, der von dem jeweiligen Devisenhändler und seinen Handelsbedingungen abhängt. Suchen Sie im Forum, ich habe irgendwo einige Informationen darüber.
Mit freundlichen Grüßen, Vladimir.
Hallo.
Herzlichen Dank für Ihre Antwort! Aber ich verstehe nicht, warum ich den Return-Operator brauche? In diesem Code gibt es zwei Bedingungen, und die Prüfung sollte beendet werden, wenn eine der beiden Bedingungen erfüllt ist.
//--- есть ли открытые позиции?bool Buy_opened=false; // переменные, в которых будет храниться информация bool Sell_opened=false; // о наличии соответствующих открытых позицийif(PositionSelect(_Symbol)==true) // есть открытая позиция
{
if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) // если истина, выполняем условие 1
{
Buy_opened=true; //это длинная позиция
}
elseif(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL) // иначе выполняем условие 2
{
Sell_opened=true; // это короткая позиция
}
}
Ausgehend von zwei Punkten auf einer Linie können Sie den Preis eines beliebigen dritten Punktes auf dieser Linie, auch in der Zukunft, ermitteln (und umgekehrt).
Ich danke Ihnen! Ich werde es versuchen.
P.S. Die einzige Sache. Das verstehe ich auf den ersten Blick nicht. Wird es im Expert Advisor in MT4 funktionieren?
//+------------------------------------------------------------------+ //| MSBB.mq4 | //| Copyright 2020, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2020, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict #include <MovingAverages.mqh> #property indicator_separate_window #property indicator_buffers 2 #property indicator_color1 clrGreen #property indicator_color2 clrRed #property indicator_width1 1 input int InpMSBBPeriod=3; // Period input ENUM_MA_METHOD InpMSBBMethod=MODE_SMA; // Method //--- indicator buffers double ExtMSBBBuffer[]; double ExtTempBuffer[]; double ExtPriceBuffer[]; double ExtSignalBuffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit(void) { //--- indicator buffers mapping IndicatorDigits(Digits-2); //--- drawing settings IndicatorBuffers(4); SetIndexStyle(0,DRAW_HISTOGRAM); SetIndexBuffer(0,ExtMSBBBuffer); SetIndexBuffer(1,ExtSignalBuffer); SetIndexStyle(1,DRAW_LINE); SetIndexBuffer(2,ExtTempBuffer); SetIndexBuffer(2,ExtPriceBuffer); SetIndexDrawBegin(1,InpMSBBPeriod); //--- name for DataWindow and indicator subwindow label IndicatorShortName("MSBB("+IntegerToString(InpMSBBPeriod)+")"); SetIndexLabel(0,"MSBB"); SetIndexLabel(1,"Signal"); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ 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 &volume[], const int &spread[]) { int i;//limit; //------ if(rates_total<=InpMSBBPeriod || InpMSBBPeriod<=2) return(0); /*//--- counting from 0 to rates_total ArraySetAsSeries(ExtMSBBBuffer,false); ArraySetAsSeries(ExtSignalBuffer,false); ArraySetAsSeries(open,false); ArraySetAsSeries(high,false); ArraySetAsSeries(low,false); ArraySetAsSeries(close,false);*/ //--- // limit=rates_total-prev_calculated; //if(prev_calculated>0) // limit++; //--- typical price and its moving average for(i=0; i<rates_total; i++) { ExtTempBuffer[i] = NormalizeDouble((close[i]-open[i])/Point(),2); ExtPriceBuffer[i] = NormalizeDouble((close[i+1]-open[i+1])/Point(),2); //ExtMSBBBuffer[i]=price_open+ExtTempBuffer[i]; //Print("ExtPriceBuffer[i] = ", ExtPriceBuffer[i]); if(ExtTempBuffer[i]==0) ExtMSBBBuffer[i]=0.0; if(ExtPriceBuffer[i]>0 && ExtTempBuffer[i]>0) { double price_open = NormalizeDouble((open[i]-open[i+1])/Point(),2); double price_close = NormalizeDouble((close[i]-close[i+1])/Point(),2); if((price_open<0 && price_close>0)||(price_open>0 && price_close<0)) ExtMSBBBuffer[i] = 0.0; if((price_open<0 && price_close<0)||(price_open>0 && price_close>0)) ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open; } if(ExtPriceBuffer[i]>0 && ExtTempBuffer[i]<0) { double price_open = NormalizeDouble((open[i]-close[i+1])/Point(),2); double price_close = NormalizeDouble((close[i]-open[i+1])/Point(),2); if((price_open<0 && price_close>0)||(price_open>0 && price_close<0)) ExtMSBBBuffer[i] = 0.0; if((price_open>0 && price_close>0)||(price_open<0 && price_close<0)) ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open; } if(ExtPriceBuffer[i]<0 && ExtTempBuffer[i]<0) { double price_open = NormalizeDouble((open[i]-open[i+1])/Point(),2); double price_close = NormalizeDouble((close[i]-close[i+1])/Point(),2); if((price_open<0 && price_close>0)||(price_open>0 && price_close<0)) ExtMSBBBuffer[i]=0.0; if((price_open<0 && price_close<0)||(price_open>0 && price_close>0)) ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open; } if(ExtPriceBuffer[i]<0 && ExtTempBuffer[i]>0) { double price_open = NormalizeDouble((open[i]-close[i+1])/Point(),2); double price_close = NormalizeDouble((close[i]-open[i+1])/Point(),2); if((price_open>0 && price_close<0)||(price_open<0 && price_close>0)) ExtMSBBBuffer[i]=0.0; if((price_open>0 && price_close>0)||(price_open<0 && price_close<0)) ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open; } //--- signal line counted in the 2-nd buffer //ExtSignalBuffer[i]=iMAOnArray(ExtMSBBBuffer,0,InpMSBBPeriod,0,InpMSBBMethod,0); SimpleMAOnBuffer(rates_total,prev_calculated,1,InpMSBBPeriod+2,ExtMSBBBuffer,ExtSignalBuffer); Print ("ExtSignalBuffer = ", ExtSignalBuffer[i]); //--- done } /* if(ExtPriceBuffer[i]>0||ExtPriceBuffer[i]<0) { ExtMSBBBuffer[i] = ExtPriceBuffer[i]+ExtTempBuffer[i]; Print("ExtMSBBBuffer[i] = ", ExtMSBBBuffer[i]); } if(ExtPriceBuffer[i]==0) { ExtMSBBBuffer[i] = 0.0; Print("ExtMSBBBuffer[i] = ", ExtMSBBBuffer[i]); } }*/ //--- //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+Guten Tag!
Könnten Sie bitte mit einem EA helfen?
Es macht Trades auf RSI-Signale von 30 und 70 Ebenen in die entsprechende Richtung, erstellt ein Raster.
Ich habe eine Art Stop-Loss-Prozentsatz, aber von Zeit zu Zeit bleiben Aufträge hängen und werden nicht geschlossen, bis ich sie manuell schließe oder bis ich das Depot verkaufe.
D.h. die Orders sind eröffnet, der Preis ist bereits um 5000 Pips und mehr weg, aber sie hängen immer noch im roten Bereich.
Sie müssen den Fehler finden. Wenn dies nicht möglich ist, sollten wir einen separaten Stop Loss in Pips in unseren EA einfügen.
Ich habe versucht, 2 EAs zu einem zu kombinieren, aber das hat mit meinen Fähigkeiten nicht funktioniert.
Hallo. Können Sie mir einen Tipp geben? Ich brauche die Anzahl der Punkte, die im letzten Tick passiert wurden. Aber ich kann es nicht verstehen.
Hallo. Können Sie mir einen Tipp geben? Ich brauche die Anzahl der Punkte, die im letzten Tick passiert wurden. Aber es funktioniert nicht.
Versuchen Sie dies.
Versuchen Sie es auf diese Weise.
Hallo noch mal.
Bitte achten Sie auf die Frage eines Neulings.
Ich muss auf Fehler im Code hinweisen, denn im Tester öffnet der Expert Advisor keine Aufträge...
Der Compiler zeigt keine Fehler oder Warnungen an, das gleiche Journal zeigt keine Fehler...
Guten Tag an alle!
Ich versuche, von mql4 auf mql5 zu wechseln.
Frage: Warum berechnet und zeigt mql5 einen mir unbekannten Ausdruck wie 2.99999999 - (minus) 05 anstelle der Differenz zwischen dem aktuellen Preis und dem Wert der Hay-Variable, die <1 sein sollte (wie in mql4)?
Wie kann ich mql5 dazu bringen, die Differenz zwischen diesen Werten korrekt zu berechnen? Ich normalisiere alle Werte mit NormalizeDouble(), aber die oben genannten Werte
Werte werden unverändert angezeigt. Dies ist für mich seltsam, da beide Werte vom doppelten Typ sind
Ich danke Ihnen allen für Ihre Hilfe.
Hallo Ivan, niemand schimpft hier über Neulinge, im Gegenteil, sie versuchen zu helfen. Ich bin selbst ein Anfänger. Nun zu Ihrer Frage. Mehrere Positionen werden geöffnet, weil die Prüfung zur Öffnung einer Position durchgeführt wurde, aber vergessen wurde, die Prüfung zu beenden. Der Operator return gibt die Kontrolle an das aufrufende Programm zurück (aus der MQL5-Referenz).
Wir müssen dem Code des Expert Advisors Return hinzufügen (gelb hervorgehoben):
Um zu verhindern, dass der Compiler Warnungen erzeugt, sollte außerdem eine weitere Bedingung in die Eröffnungsbedingungen für die Kauf- und Verkaufspositionen aufgenommen werden, um OrderSend(mrequest,mresult) zu prüfen. Diese Bedingung wird durch den if-Operator definiert und sollte wie folgt aussehen
Eine weitere Sache sollte berücksichtigt werden. Manchmal wird beim Übergang von einem Handelstag zum anderen um 23:59:59 Uhr eine eröffnete Position geschlossen und dann um 00:00:00 Uhr eine neue Position eröffnet. Dabei handelt es sich um den so genannten Rollover-Close und Rollover-Open, der von dem jeweiligen Devisenhändler und seinen Handelsbedingungen abhängt. Suchen Sie im Forum, ich habe irgendwo einige Informationen darüber.
Mit freundlichen Grüßen, Vladimir.
Hallo.
Herzlichen Dank für Ihre Antwort! Aber ich verstehe nicht, warum ich den Return-Operator brauche? In diesem Code gibt es zwei Bedingungen, und die Prüfung sollte beendet werden, wenn eine der beiden Bedingungen erfüllt ist.
Oder ist es nicht so?