Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 135
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Geben Sie die Preise alle auf einmal ein, oder holen Sie sie ein und geben sie dann in die Berechnung ein?
Legen Sie die Preise auf einmal fest oder erhalten Sie sie und fügen sie dann in die Berechnung ein?
for(int i=1; i<=Periode; i++)
{
H1_Close[i]=Close[k];
k--;
}
Ich nehme einen Teil von timesession, der dem Zeitraum ab dem letzten geschlossenen Balken entspricht, und drehe ihn im Array um, da 1 der vorletzte Balken in timesession ist und die Berechnung mit dem i-ten Balken beginnen muss.
d.h. meine Funktion sollte den SMMA-Wert des letzten geschlossenen Balkens zurückgeben.
Der folgende Code verschlüsselt eine einfache Idee.
Wenn der letzte geschlossene Auftrag auf SEL
Wenn der letzte geschlossene Auftrag auf der NEL war
Einen NEL-Auftrag eröffnen
if ( OrderType ()==OP_SELL)
X = OrderProfit( );
if (OrderSelect (Ht-1,SELECT_BY_POS, MODE_HISTORY))
if ( OrderType ()==OP_BUY)
if(X < 0)
OrderSend(Symbol(),OP_SELL,0.1,Bid ,3,Ask+400*Point,Ask-200*Point,"17-10",123 );
QUESTION
Welches Sprachkonstrukt kann verwendet werden, um zwei weitere Bedingungen zu diesem Code hinzuzufügen (rot eingekreist)
Wenn der letzte geschlossene Auftrag NEL ist
Wenn der letzte CEL-Auftrag abgeschlossen wurde
Wenn der letzte geschlossene Auftrag an der NEL geschlossen wurde
Wenn der letzte geschlossene Auftrag auf einemSL
geschlossen wurde,danke für Ihre Hilfe.
Ich wäre Ihnen sehr dankbar, wenn Sie den Code schreiben und nicht nur erklären könnten, was zu tun ist.
Hallo. Ich schreibe ein Skript zum Löschen aller ausstehenden Aufträge. Es wird jedoch nur ein Auftrag gelöscht. Ich habe immer zwei ausstehende Aufträge oder einen. In beiden Fällen wird nur ein Kaufstopp gelöscht. Um den Sell Stop zu löschen, müssen Sie das Skript erneut ausführen, vorausgesetzt, es gibt keine anderen Buy Stop-Aufträge. Bitte geben Sie an, wo der Fehler liegt.
die Suchrichtung ändern for(i=Gesamt-1;i>=0;i--)
Danke, jetzt funktioniert es. Verstehe ich das richtig, dass, wenn ein Auftrag mit Index 0 gelöscht wird, ein Auftrag mit Index 1 den Index 0 erhält und bei der nächsten Iteration i == 1 ist und kein solcher Auftrag erscheint? Können Sie feststellen, ob dies der Fall ist?
Es gibt eine anpassbare Fraktal-Funktion, na ja, das ist ganz schön schwer. Ich habe das Zeichnen von Objekten nur belassen, um visuell zu zeigen, ob die Fraktale richtig geformt werden - es wird nicht vorhanden sein.
Frage: Wie können wir es einfacher machen, denn visuelle Tests sind blöd:
extern int FrRight=5; // Баров справа
//-----------------------------------------------------------------------------------------------
void OnTick()
{
int nFrUp= GetBarFractal(Symbol(),PERIOD_CURRENT,FrLeft,FrRight,0,MODE_UPPER); // Возвращает номер бара
int nFrDn= GetBarFractal(Symbol(),PERIOD_CURRENT,FrLeft,FrRight,0,MODE_LOWER); // Возвращает номер бара
double FrHigh = High[nFrUp]; // Цена верхнего фрактала
double FrLow = Low [nFrDn]; // Цена нижнего фрактала
SetArrow("FrUp"+"_"+(string)Time[nFrUp], Time[nFrUp], High[nFrUp], clrDeepSkyBlue, 217, 2, ANCHOR_BOTTOM);
SetArrow("FrDn"+"_"+(string)Time[nFrDn], Time[nFrDn], Low[nFrDn], clrDeepPink, 218, 2, ANCHOR_TOP);
// Comment("Price: ",FrHigh,", Num: ",nFrUp,"\nPrice: ",FrLow,", Num: ",nFrDn);
}
//----------------------------------------------------------------------------------------------+
//---------------------- Возвращает номер бара фрактала (настраиваемый) ------------------------+
//----------------------------------------------------------------------------------------------+
int GetBarFractal(string symb,ENUM_TIMEFRAMES tf=0,int nLeft=2,int nRight=2,int numFr=0,int mode=MODE_UPPER) {
int i=0,cn=0,pos=0,r=0,l=0,e=0,equals,bars;
double _high[], _low[];
nLeft=nLeft<=2?2:nLeft;
nRight=nRight<=2?2:nRight;
equals=nLeft+nRight;
bars=Bars(symb,tf)-equals;
ArraySetAsSeries(_high,true);
ArraySetAsSeries(_low,true);
for(pos=nRight+1; pos<bars; pos++) {
r=nRight;
if(mode==MODE_UPPER) {
CopyHigh(symb,tf,0,pos+equals+1,_high);
for(i=1; i<=r; i++) {
if(_high[pos]<=_high[pos-i]) break;
}}
if(mode==MODE_LOWER) {
CopyLow(symb,tf,0,pos+equals+1,_low);
for(i=1; i<=r; i++) {
if(_low[pos]>=_low[pos-i]) break;
}}
//--
if(i==r+1) {
l=nLeft;
e=equals;
for(int j=1; j<=l+equals; j++) {
if(mode==MODE_UPPER) {
if(_high[pos]<_high[pos+j]) break;
if(_high[pos]>_high[pos+j]) l--;
if(_high[pos]==_high[pos+j]) e--;
}
if(mode==MODE_LOWER) {
if(_low[pos]>_low[pos+j]) break;
if(_low[pos]<_low[pos+j]) l--;
if(_low[pos]==_low[pos+j]) e--;
}
if(l==0) {
cn++;
if(cn>numFr) return(pos);
}
//--
if(e<0) break;
}}
}
Print(__FUNCTION__": Фрактал не найден");
return(0);
}
//----------------------------------------------------------------------------------------------+
//------------------- Функция рисования значка на графике, объект OBJ_ARROW --------------------+
//----------------------------------------------------------------------------------------------+
void SetArrow(string nm="", datetime t1=0, double p1=0, color col=clrRed,
int code=252, int width=1, int anchor=0) {
if(ObjectFind(0,nm)==-1) {
ObjectCreate(0,nm,OBJ_ARROW,0,0,0);
ObjectSetInteger(0,nm,OBJPROP_COLOR,col);
ObjectSetInteger(0,nm,OBJPROP_ARROWCODE,code);
ObjectSetInteger(0,nm,OBJPROP_ANCHOR,anchor);
ObjectSetInteger(0,nm,OBJPROP_WIDTH,width);
ObjectSetInteger(0,nm,OBJPROP_SELECTED,false);
ObjectSetInteger(0,nm,OBJPROP_SELECTABLE,true);
ObjectSetInteger(0,nm,OBJPROP_HIDDEN,false);
ObjectSetDouble(0,nm,OBJPROP_PRICE,p1);
ObjectSetInteger(0,nm,OBJPROP_TIME,t1);
}
}
Danke!
Es gibt eine anpassbare Fraktal-Funktion, na ja, das ist ganz schön schwer. Ich habe das Zeichnen von Objekten nur deshalb belassen, um visuell zu zeigen, ob sich die Fraktale richtig bilden - das wird nicht passieren.
Frage: Wie kann ich es einfacher machen, denn es ist blöd , es visuell zu testen:
Danke!
Hallo. Könnten Sie einem Neuankömmling einen Rat geben?
Hier ist ein Beispiel:
if(Bedingung1)
if(Bedingung2)
{
}
sonst
{
}
Dem Code zufolge sollte sich Else auf if(condition1) beziehen und wird ausgeführt, wenn condition1 nicht erfüllt ist
Tatsächlich wird sie aber auch ausgeführt, wenn Bedingung2 nicht erfüllt ist.
Hallo. Könnten Sie einem Neuankömmling einen Rat geben?
Hier ist ein Beispiel:
if(Bedingung1)
if(Bedingung2)
{
}
sonst
{
}
Dem Code zufolge sollte sich Else auf if(condition1) beziehen und wird ausgeführt, wenn condition1 nicht erfüllt ist
Tatsächlich wird sie aber ausgeführt, wenn Bedingung2 nicht erfüllt ist.
Gewöhnen Sie sich an, lockige Klammern sofort mit der Bedingung zu setzen
if(Bedingung)
{
}
A gemäß Ihrer Frage
{
if(Условие2)
{
}
}
else
{
}