Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 982

 
 int x=0;
 int scale_mas[13]={0,1,2,4,8,16,32,64,128,256,512,1024,2048,4096};//объявление массива

 for(int i=0;i < ArraySize(scale_mas);i++){
    if(x == scale_mas[0])x = scale_mas[1];                       //если х=индекс0, то х=индекс1
    if(x >= ArraySize(scale_mas))x = scale_mas[11];              //если х>= размер массива, то х=индекс11
    i=x;
    if(ObjectGetInteger(0, "Button+", OBJPROP_STATE) == false){  //если кнопка "+" нажата
       i=i+1;                                                    //увеличиваем индекс на 1
       ObjectSetInteger(0, "Button+", OBJPROP_STATE,true);}
                        
    x=i;							 //присваиваем х значение последнего индекса
    if(ObjectGetInteger(0, "Button-", OBJPROP_STATE) == false){  //если кнопка "-" нажата
       i=i-1;                                                    //уменьшаем индекс на 1
    ObjectSetInteger(0, "Button-", OBJPROP_STATE,true);}
                            
    x=i;                                                         //присваиваем х значение последнего индекса
 ObjectSetString(0,"=TrendLine",OBJPROP_TEXT,scale_mas[x]);}}    //выводим результат scale_mas[x]
Gestern schrieb ich den Code, es scheint zu funktionieren, wie es sollte, aber nur, wenn ich auf den obersten Wert des Arrays mit dem Plus-Button zu bekommen, setzt es auf den Anfang des Arrays und bewegt sich das Array wieder nach oben. Was kann ich im Code hinzufügen oder korrigieren, so dass, wenn der oberste Wert des Arrays erreicht ist, weitere Klicks auf die Plus-Schaltfläche beim obersten Index anhalten und nicht auf den untersten Wert des Arrays zurückgesetzt werden? Oder kann der Code auf andere Weise vereinfacht werden, um die Idee des Anklickens einer Schaltfläche umzusetzen?
 
Ivan Revedzhuk:
Gestern schrieb ich den Code, es scheint zu funktionieren, wie es sollte, aber nur, wenn ich auf den obersten Wert des Arrays mit dem Plus-Button zu bekommen, setzt es auf den Anfang des Arrays und bewegt sich das Array wieder nach oben. Was kann ich im Code hinzufügen oder korrigieren, so dass, wenn der oberste Wert des Arrays erreicht ist, weitere Klicks auf die Plus-Schaltfläche beim obersten Index anhalten und nicht auf den untersten Wert des Arrays zurückgesetzt werden? Oder kann der Code auf andere Weise vereinfacht werden, um die Idee des Anklickens einer Schaltfläche umzusetzen?
if(x >= ArraySize(scale_mas))
 ArraySize(scale_mas)-1;              //если х>= размер массива, то ....

Wahrscheinlich ja.

 
Alexey Viktorov:

Ich denke schon.

Das habe ich auch versucht, funktioniert genauso

 
Ivan Revedzhuk:

Das habe ich auch versucht, funktioniert genauso

Ich habe es nicht sofort bemerkt, wofür ist der Zyklus?

 
Alexey Viktorov:

Ich habe es nicht sofort bemerkt, aber wofür ist die Schleife?

Gibt es eine Möglichkeit, dies ohne sie zu tun? Ich weiß einfach nicht, was das Beste ist, und ich tue nur das, was ich für logisch halte.

 
Ivan Revedzhuk:

Gibt es eine Möglichkeit, dies ohne sie zu tun? Ich weiß einfach nicht, was das Beste ist, und tue, was ich für logisch halte.

Nun, die Logik muss anders sein. Durch Drücken der Taste + wird der Index des Feldes erhöht. Wenn der Höchstwert erreicht ist, wird er nicht erhöht, sondern bleibt auf dem Höchstwert. Drücken Sie die Taste - der Index sinkt. Erreicht Null, reagiert nicht auf Drücken, bleibt auf Index 0.

Oder gab es eine andere Idee?

PS: Und wer hat das Beispiel für die Arbeit mit Flaggen als Antwort auf diese Frage gepostet und dann gelöscht? Warum haben Sie sie gelöscht? Schließlich ist es eine wirklich gute Lösung für den Mann. Warum sollte er eine begrenzte Anzahl von Geräten benötigen?
 
Alexey Viktorov:

Nun, die Logik muss anders sein. Durch Drücken der Taste + wird der Array-Index erhöht. Wenn der Höchstwert erreicht ist, wird er nicht erhöht, sondern bleibt auf dem Höchstwert. Drücken Sie die Taste - der Index sinkt. Erreicht Null, antwortet nicht, bleibt auf Index 0.

Oder gab es eine andere Idee?

PS: Und wer hat das Beispiel für die Arbeit mit Flaggen als Antwort auf diese Frage gepostet und dann gelöscht? Warum haben Sie sie gelöscht? Schließlich ist es eine wirklich gute Lösung für den Mann. Warum sollte er eine begrenzte Anzahl von Geräten benötigen?

Nein, genau das war die Idee. Ich weiß nicht wirklich, wie man es richtig macht, also habe ich es so gemacht, wie ich es bekommen habe. Aber ich habe festgestellt, dass, wenn die Schleife im Programm läuft, bis die Schleife durch Drücken der Schaltflächen auf dem Diagramm angeklickt wird, alles andere nicht funktioniert. Es ist, als würde alles stillstehen. Ich verstehe nicht, warum dies geschieht, wenn es irgendwelche Varianten gibt, um die Idee anders umzusetzen, würde ich es zu schätzen wissen...

 

Das war's. Das Problem ist gelöst) ohne Arrays und andere Dinge. Es erwies sich als viel einfacher))))

Die zweite Frage kam auf. Wie kann ich die Auslösestufe des Alarms im Code mit dem Einstellungspfeil einstellen, der erscheint, wenn der Alarm über das Kontextmenü mit der Maus eingestellt wird?

Frage zu Alert

 

Bitte helfen Sie, plz, ist es möglich, eine Funktion zu diesem EA hinzufügen, so dass der EA in das Fenster EURUSD gesetzt wird ein Geschäft mit den gleichen Parametern zu öffnen, zur gleichen Zeit, aber für GBPUSD, und EURUSD wird nicht geöffnet.

//+-------------------------------------------------------------------------------------------------------------------------------------------------+

//| Entwickler: Minajew Andrej |

//| Expert Advisor: Stochastisch.mq4 |

|| Website: safe-forex.|| Website: safe-forex. |

//| Mail:minaev.work@mail.ru |

//| Skype: live:minaev.Arbeit |

//+-------------------------------------------------------------------------------------------------------------------------------------------------+

#property copyright "Safe-Forex.ru"

#property link "https://safe-forex.ru"

#Eigenschaft streng


extern bool Use_Symbol1 = true;

externer String Symbol1 = "USDJPY";


input string settings = ""; // Expert Advisor Einstellungen

Eingabe int magic = 111; // Eingabe magic

input double fixVolume = 0.01; // Volumen

input int takeProfit = 500; // Gewinn

input int stopLoss = 500; //Verlust

Eingabe int buyLevel = 100; // Eingabe int buy Level

input int sellLevel = 0; // 75 Sell Level


extern int ADXperiod = 15; //ADX-Periode 15

extern int ADXLevel =1;


extern int MAperiod =360; //MA-Periode 80

extern int MAperiod_2 =360; //MA-Periode 80



input string stochSettings = ""; // Einstellungen des Stochastik-Oszillator-Indikators

input int stochPeriodK = 5; //Periode %K

input int stochPeriodD = 3; //Periode %D

input int stochSlowing = 3; // Verlangsamung

input ENUM_STO_PRICE stochPrice = STO_LOWHIGH; // Preis

Eingabe ENUM_MA_METHOD stochMethod = MODE_SMA; // Methode


datetime newCandle; // neue Kerze auf dem aktuellen Chart

bool allowOpenBuy; // Erlaubnis zum Öffnen einer Kaufposition

allowOpenSell; // Erlaubnis zur Eröffnung einer Verkaufsposition

//+-------------------------------------------------------------------------------------------------------------------------------------------------+

int OnInit(void)

{

return INIT_SUCCEED;

}

//+-------------------------------------------------------------------------------------------------------------------------------------------------+

void OnDeinit(const int reason)

{

}

//+-------------------------------------------------------------------------------------------------------------------------------------------------+

void OnTick(void)

{

if(newCandle!=Time[0]) CheckSignalExist(); newCandle=Time[0];

if(allowOpenBuy) OpenPosition(OP_BUY);

if(allowOpenSell) OpenPosition(OP_SELL);

}

//+-------------------------------------------------------------------------------------------------------------------------------------------------+

//| Funktion öffnet Position zum aktuellen Preis |

//+-------------------------------------------------------------------------------------------------------------------------------------------------+

void OpenPosition(int type)

{


double price=0.0;

if(type==OP_BUY) price=Ask;

if(type==OP_SELL) price=Bid;

int ticket=OrderSend(_Symbol,Typ,fixVolumen,Preis,0,0,",magic,0);

// int ticket=OrderSend(,type,fixVolume,price,0,0,0,",magic,0);

Sleep(1000);

if(Ticket>0)

{

if(typ==OP_BUY)

{

Print("Kaufposition eröffnet, Ticket: ",Ticket);

allowOpenBuy=false;

// SetStopOrders(ticket);

}

if(typ==OP_SELL)

{

Print("Verkaufsposition eröffnet, Ticket: ",Ticket);

allowOpenSell=false;

// SetStopOrders(ticket);

}

}

if(ticket<0)

{

if(type==OP_BUY) Print("Kaufposition wurde nicht eröffnet, Fehler: ",GetLastError());

if(type==OP_SELL) Print("Verkaufsposition konnte nicht eröffnet werden, Fehler: ",GetLastError());

}

}

//+-------------------------------------------------------------------------------------------------------------------------------------------------+

//| Funktion setzt Stop-Order |

//+-------------------------------------------------------------------------------------------------------------------------------------------------+

//void SetStopOrders(int ticket)

//{

// double stopLevel=MarketInfo(_Symbol,MODE_STOPLEVEL),

// spread =MarketInfo(_Symbol,MODE_SPREAD),

// tp =Gewinnmitnahme,

// sl =stopLoss;

// stopLevel+=spread;

// if(tp<stopLevel)

// {

// tp=stopLevel;

// Print("Mindestabstand für Gewinnsatz");

// }

// if(sl<stopLevel)

// {

// sl=stopLevel;

// Print("Mindestabstand für Verlustmenge");

// }

// if(OrderSelect(ticket,SELECT_BY_TICKET))

// {

// int type=OrderType();

// double opp =OrderOpenPrice();

// if(type==OP_BUY) {tp=opp+tp*_Point; sl=opp-sl*_Point;}

// if(type==OP_SELL) {tp=topp-tp*_Point; sl=opp+sl*_Point;}

// if(OrderModify(ticket,opp,sl,tp,0))

// {

// if(type==OP_BUY) Print("P&L levels set for Buy position, ticket: ",ticket);

// if(type==OP_SELL) Print("P&L levels für die Sell-Position wurden gesetzt, Ticket: ",Ticket);

// }

// sonst {

// if(type==OP_BUY) Print("P&L-Levels für die Position Buy wurden nicht gesetzt, Ticket: ",Ticket," Fehler: ",GetLastError());

// if(type==OP_SELL) Print("P&L-Levels für die Sell-Position wurden nicht gesetzt; ticket: ",ticket," error: ",GetLastError();

// }

// }

//}

//+-------------------------------------------------------------------------------------------------------------------------------------------------+

//| Funktion prüft auf Vorhandensein eines Signals |

//+-------------------------------------------------------------------------------------------------------------------------------------------------+

void CheckSignalExist(void)


{

double ADX1=iADX(Symbol(),Zeitraum(),ADXPeriode,0,MODE_MAIN,1); ////////////////////////////

double ADX2=iADX(Symbol(),Periode(),ADXPeriode,0,MODE_MAIN,2);

double DPLUS=iADX(Symbol(),Zeitraum(),ADXPeriode,0,MODE_PLUSDI,1);

double DMINUS=iADX(Symbol(),Zeitraum(),ADXPeriode,0,MODE_MINUSDI,1);

double MA=iMA(Symbol(),Zeitraum(),MAZeitraum,0,MODE_SMA,0,1);

double MA_2=iMA(Symbol(),Zeitraum(),MAperiod_2,0,MODE_SMA,0,1);


//PERIOD_H1

double mainLine1=iStochastic(_Symbol,PERIOD_CURRENT,stochPeriodK,stochPeriodD,stochSlowing,stochMethod,stochPrice,MODE_MAIN,1),

mainLine2=iStochastic(_Symbol,PERIOD_CURRENT,stochPeriodK,stochPeriodD,stochSlowing,stochMethod,stochPrice,MODE_MAIN,2),

signLine1=iStochastic(_Symbol,PERIOD_CURRENT,stochPeriodK,stochPeriodD,stochSlowing,stochMethod,stochPrice,MODE_SIGNAL,1),

signLine2=iStochastic(_Symbol,PERIOD_CURRENT,stochPeriodK,stochPeriodD,stochSlowing,stochMethod,stochPrice,MODE_SIGNAL,2);

Comment(" ", (Ask-Bid)/1.5," ",Bid-Close[1]," ", Ask-Close[1]);

// if(mainLine1>signLine1 && mainLine2<signLine2 && mainLine1<buyLevel && ADX1>ADXLevel && mainLine2<buyLevel

//& iClose(Symbol(),Period(),1)>MA& iClose(Symbol(),Period(),1)>MA_2 && signLine1<buyLevel && signLine2<buyLevel

if(mainLine1>signLine1 && mainLine2<signLine2 && mainLine1<buyLevel && ADX1>ADXLevel && mainLine2<buyLevel

//&Close[2]<MA& Close[2]<MA_2 && signLine1<buyLevel && signLine2<buyLevel

&&Close[10] > Close[1]-(Close[1]-Close[20])

&& Close[10]>Bid )

{

Print("Ein Signal zur Eröffnung einer Kaufposition ist erschienen");

if(GetPositionsNumber()==0)

{

// allowOpenSell=true;

{ allowOpenBuy=true;

Sleep(1000);

Print("Erlaubt, eine Kaufposition zu eröffnen");

}

}

// if(mainLine1<signLine1 && mainLine2>signLine2 && mainLine1>sellLevel && ADX1>ADXLevel&& mainLine2>sellLevel

//& iClose(Symbol(),Period(),1)<MA& iClose(Symbol(),Period(),1)<MA_2 && signLine1>sellLevel && signLine2>sellLevel

if(mainLine1>signLine1 && mainLine2<signLine2 && mainLine1<buyLevel && ADX1>ADXLevel && mainLine2<buyLevel

//&Close[2]>MA& Close[2]>MA_2 && signLine1<buyLevel && signLine2<buyLevel

&&Close[10] < Close[1]+(Close[20]-Close[1])

&& Close[10]<Ask )

{

Print("Ein Signal zur Eröffnung einer Verkaufsposition ist erschienen");

if(GetPositionsNumber()==0)

{

// allowOpenBuy=true;

allowOpenSell=true;

Sleep(1000);

Print("Erlaubt, eine Verkaufsposition zu eröffnen");

}

}

}
















/////////////////////////////////////////



//+-------------------------------------------------------------------------------------------------------------------------------------------------+

//| Die Funktion gibt die Anzahl der offenen Positionen zurück. |

//+-------------------------------------------------------------------------------------------------------------------------------------------------+







int GetPositionsNumber(void)

{

int number=0;

for(int i=0; i<OrdersTotal(); i++)

if(OrderSelect(i,SELECT_BY_POS))

if(OrderSymbol()==_Symbol && OrderMagicNumber()==magisch)

Nummer++;

Rückgabenummer;

}

//+---------------------------------------------------------------------------------------------------------------------------------

 
vvs1:

Hilfe, plz, ist es möglich, eine Funktion zu diesem EA hinzuzufügen, so dass der EA im EURUSD-Fenster installiert würde einen Handel mit den gleichen Parametern öffnen, zur gleichen Zeit, aber auf GBPUSD, und nicht auf EURUSD öffnen.

Tut mir leid, ist Ihr Kopf in Ordnung? Sie haben den Code nicht nur an einer Stelle eingefügt, sondern auch eine große Anzahl von Leerzeilen hinterlassen.

Meinen Sie nicht, dass Sie etwas Respekt vor demjenigen haben sollten, den Sie um Hilfe bitten?

Grund der Beschwerde: