Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 63
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
Sie prüfen auf einen bestehenden Balken double rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,0);
Der Kurs steigt, es kommt zu einer Überschreitung der 70er-Marke und zum Einstieg in den Handel. Bei der Schließung des Balkens sehen Sie bereits, dass der RSI niedriger ist, aber vorher war er höher und ist dann unter das Niveau zurückgekehrt.
Führen Sie die Prüfung bei einem geschlossenen Balken durch, dann wird dies nicht passieren, und der Einstieg erfolgt bei einem bestätigten Signal:
double rsi=iRSI(_Symbol,0,RSIZeitraum,PRICE_CLOSE,1);
double rsi1=iRSI(_Symbol,0,RSIZeitraum,PRICE_CLOSE,2);
Ich habe es so geschrieben: (wahrscheinlich falsch).
double slSell,slBuy,tpSell,tpBuy,TotalBiu,TotalSell;
int tiket;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
OrderBuy=0; OrderSell=0;
for(int i=OrdersTotal()-1; i>=0; i--) //Цикл по всем ордерам
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) //Выбрали ордер
{
if(OrderType()==OP_BUY)
{
OrderBuy++; //Кол. покупок
}
if(OrderType()==OP_SELL)
{
OrderSell++; //Кол. продаж
}
}
}
double rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,0);
double rsi1=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,1);
double rsi2=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,2);
//+------------------------------------------------------------------+
double StopLossLevel;
double TakeProfitLevel;
if(StopLoss>0) StopLossLevel=Bid-StopLoss*Point; else StopLossLevel=0.0;
if(TakeProfit>0) TakeProfitLevel=Ask+TakeProfit*Point; else TakeProfitLevel=0.0;
tpBuy=NormalizeDouble(Ask+TakeProfit*_Point,_Digits);
slBuy=NormalizeDouble(Bid-StopLoss*_Point,_Digits);
tpSell=NormalizeDouble(Bid-TakeProfit*_Point,_Digits);
slSell=NormalizeDouble(Ask+StopLoss*_Point,_Digits);
///---
if(OrderBuy==0 && rsi>Urov_70 && rsi1<Urov_70 && rsi2<Urov_70)
{
tiket=OrderSend(_Symbol,OP_BUY,Lot,Ask,slippage,slBuy,tpBuy,NULL,MagicNumber,0,clrBlue);
if(tiket<0)Print("Ошибка открытия ордера № - ",GetLastError());
}
if(OrderSell==0 && rsi<Urov_30 && rsi1>Urov_30 && rsi2>Urov_30)
{
tiket=OrderSend(_Symbol,OP_SELL,Lot,Bid,slippage,slSell,tpSell,NULL,MagicNumber,0,clrRed);
if(tiket<0)Print("Ошибка открытия ордера № - ",GetLastError());
}
}
//+------------------------------------------------------------------+
Ergebnis: Aufträge werden geöffnet, wenn es keinen Crossover gibt...
Ich habe es so geschrieben: (wahrscheinlich falsch).
}
double rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,0);
double rsi1=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,1);
double rsi2=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,2);
//+------------------------------------------------------------------+
double StopLossLevel;
Das Ergebnis ist wie folgt: Die Aufträge werden geöffnet, wenn es keinen Crossover gibt...
Warum brauchen Sie den aktuellen Balkendouble rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,0); ???
Ihr umgeschriebener Code erfüllt genau die gleiche Bedingung wie zuvor - auf dem Null-Balken überschritt der Preis das Niveau und ein Handel wurde eröffnet, später kehrte der Preis zurück und der RSI kehrte unter das Niveau zurück, als Ergebnis gibt es nach dem Schließen des Balkens kein Signal.
Verwenden Sie die Nullleiste nicht in der Berechnung.
Warum brauchen Sie den aktuellen Balkendouble rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,0); ???
Ihr umgeschriebener Code erfüllt genau die gleiche Bedingung wie zuvor, auf dem Null-Balken überschritt der Preis das Niveau und ein Handel wurde eröffnet, später kehrte der Preis zurück und der RSI kehrte unter das Niveau zurück, als Ergebnis, nach dem Schließen des Balkens gibt es kein Signal.
Verwenden Sie die Nullleiste nicht in der Berechnung.
Können Sie mir sagen, warum es einen Fehler gibt?
double slSell,slBuy,tpSell,tpBuy,TotalBiu,TotalSell;
int tiket;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
OrderBuy=0; OrderSell=0;
for(int i=OrdersTotal()-1; i>=0; i--) //Цикл по всем ордерам
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) //Выбрали ордер
{
if(OrderType()==OP_BUY)
{
OrderBuy++; //Кол. покупок
}
if(OrderType()==OP_SELL)
{
OrderSell++; //Кол. продаж
}
}
}
//double rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,0);
double rsi1=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,1);
double rsi2=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,2);
//+------------------------------------------------------------------+
double StopLossLevel;
double TakeProfitLevel;
if(StopLoss>0) StopLossLevel=Bid-StopLoss*Point; else StopLossLevel=0.0;
if(TakeProfit>0) TakeProfitLevel=Ask+TakeProfit*Point; else TakeProfitLevel=0.0;
tpBuy=NormalizeDouble(Ask+TakeProfit*_Point,_Digits);
slBuy=NormalizeDouble(Bid-StopLoss*_Point,_Digits);
tpSell=NormalizeDouble(Bid-TakeProfit*_Point,_Digits);
slSell=NormalizeDouble(Ask+StopLoss*_Point,_Digits);
///---
if(CountBuy()+CountSell()==0 && rsi1>Urov_70 && rsi2<Urov_70)
{
tiket=OrderSend(_Symbol,OP_BUY,Lot,Ask,slippage,slBuy,tpBuy,NULL,MagicNumber,0,clrBlue);
if(tiket<0)Print("Ошибка открытия ордера № - ",GetLastError());
}
if(CountBuy()+CountSell()==0 && rsi1<Urov_30 && rsi2>Urov_30)
{
tiket=OrderSend(_Symbol,OP_SELL,Lot,Bid,slippage,slSell,tpSell,NULL,MagicNumber,0,clrRed);
if(tiket<0)Print("Ошибка открытия ордера № - ",GetLastError());
}
}
//+------------------------------------------------------------------+
int CountBuy()
{
int count=0;
for(int trade=OrdersTotal()-1; trade>0; trade--);
{
if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES)==true)
{
if(OrderSymbol()==_Symbol && OrderMagicNumber()==MagicNumber && OrderType()==OP_BUY)
count++;
}
}
return(count);
}
//+------------------------------------------------------------------+
int CountSell()
{
int count=0;
for(int trade=OrdersTotal()-1; trade>0; trade--);
{
if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES)==true)
{
if(OrderSymbol()==_Symbol && OrderMagicNumber()==MagicNumber && OrderType()==OP_SELL)
count++;
}
}
return(count);
}
//+------------------------------------------------------------------+
Können Sie mir sagen, warum es einen Fehler gibt?
double slSell,slBuy,tpSell,tpBuy,TotalBiu,TotalSell;
int tiket;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
OrderBuy=0; OrderSell=0;
for(int i=OrdersTotal()-1; i>=0; i--) //Цикл по всем ордерам
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) //Выбрали ордер
{
if(OrderType()==OP_BUY)
{
OrderBuy++; //Кол. покупок
}
if(OrderType()==OP_SELL)
{
OrderSell++; //Кол. продаж
}
}
}
//double rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,0);
double rsi1=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,1);
double rsi2=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,2);
//+------------------------------------------------------------------+
double StopLossLevel;
double TakeProfitLevel;
if(StopLoss>0) StopLossLevel=Bid-StopLoss*Point; else StopLossLevel=0.0;
if(TakeProfit>0) TakeProfitLevel=Ask+TakeProfit*Point; else TakeProfitLevel=0.0;
tpBuy=NormalizeDouble(Ask+TakeProfit*_Point,_Digits);
slBuy=NormalizeDouble(Bid-StopLoss*_Point,_Digits);
tpSell=NormalizeDouble(Bid-TakeProfit*_Point,_Digits);
slSell=NormalizeDouble(Ask+StopLoss*_Point,_Digits);
///---
if(CountBuy()+CountSell()==0 && rsi1>Urov_70 && rsi2<Urov_70)
{
tiket=OrderSend(_Symbol,OP_BUY,Lot,Ask,slippage,slBuy,tpBuy,NULL,MagicNumber,0,clrBlue);
if(tiket<0)Print("Ошибка открытия ордера № - ",GetLastError());
}
if(CountBuy()+CountSell()==0 && rsi1<Urov_30 && rsi2>Urov_30)
{
tiket=OrderSend(_Symbol,OP_SELL,Lot,Bid,slippage,slSell,tpSell,NULL,MagicNumber,0,clrRed);
if(tiket<0)Print("Ошибка открытия ордера № - ",GetLastError());
}
}
//+------------------------------------------------------------------+
int CountBuy()
{
int count=0;
for(int trade=OrdersTotal()-1; trade>0; trade--);
{
if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES)==true)
{
if(OrderSymbol()==_Symbol && OrderMagicNumber()==MagicNumber && OrderType()==OP_BUY)
count++;
}
}
return(count);
}
//+------------------------------------------------------------------+
int CountSell()
{
int count=0;
for(int trade=OrdersTotal()-1; trade>0; trade--);
{
if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES)==true)
{
if(OrderSymbol()==_Symbol && OrderMagicNumber()==MagicNumber && OrderType()==OP_SELL)
count++;
}
}
return(count);
}
//+------------------------------------------------------------------+
Können Sie mir sagen, warum ein Fehler angezeigt wird?
for(int trade=OrdersTotal()-1; trade>0; trade--);
{
if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES)==true)
{
if(OrderSymbol()==_Symbol && OrderMagicNumber()==MagicNumber && OrderType()==OP_SELL)
count++;
}
}
return(count);
}
//+------------------------------------------------------------------+
extra " ; "
{
int count=0;
for(int trade=OrdersTotal()-1; trade>0; trade--); <<<
{
if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==_Symbol && OrderMagicNumber()==MagicNumber && OrderType()==OP_BUY)
count++;
}
}
return(count);
}
//+------------------------------------------------------------------+
int CountSell()
{
int count=0;
for(int trade=OrdersTotal()-1; trade>0; trade--); <<<
{
if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==_Symbol && OrderMagicNumber()==MagicNumber && OrderType()==OP_SELL)
count++;
}
}
return(count);
}
Und das wäre in diesem Fall auch besser so:
Im Übrigen.
überflüssig " ; "
{
int count=0;
for(int trade=OrdersTotal()-1; trade>0; trade--); <<<
{
if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==_Symbol && OrderMagicNumber()==MagicNumber && OrderType()==OP_BUY)
count++;
}
}
return(count);
}
//+------------------------------------------------------------------+
int CountSell()
{
int count=0;
for(int trade=OrdersTotal()-1; trade>0; trade--); <<<
{
if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==_Symbol && OrderMagicNumber()==MagicNumber && OrderType()==OP_SELL)
count++;
}
}
return(count);
}
Und das wäre in diesem Fall auch besser so:
Hallo zusammen, wie schreibe ich den Ausdruck
das fünfte Los entspricht der Summe der Lose 1 und 4
um den ersten oder den letzten von allen zu finden, kann über die Ticketdefinition gefunden werden
Aber wie kann man einen Zwischenwert finden, wenn man die ständigen Änderungen im aktuellen Raster berücksichtigt?
Ich meine, jede Bestellung sollte irgendwo oder auf andere Weise gespeichert werden.
und gibt es da einen Unterschied?
zwischen
{
if uslovie1==true {...}
if uslovie2==true {...}
if uslovie3==true {...}
}
И
void OnTick()
{
{
if uslovie1==true
{...}
else if {...}
else if {...}
}
}