Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 62
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
Leute, was ist der beste Weg, um es zu tun: Ich möchte die Verteilung der Strikes von verlorenen und profitablen Trades sehen... Ich bin nicht gut in Arrays.
Nach einem verlorenen Verkauf
Price_LastSell=5; Vol=Vol*Y; Izm=2; Opn_B=true; k=k+1;
/* Buf1[p]=Buf1[p]+1; p=0;
Alert ("Profitable ", Buf1[1], ", ", Buf1[2], ", ", Buf1[3], ", ", Buf1[4], ", ", Buf1[5], ", ", Buf1[6], ", ", Buf1[7], ", ", Buf1[8], ", Buf1[9], ", Buf1[10]); */
nach dem gewinnbringenden Verkauf
Price_LastSell=5; Vol=VolumeOpen; Izm=2; Opn_S=true; p=p+1;
/* Buf2[k]=Buf2[k]+1; k=0;
Alert ("Verluste ", Buf2[1], ", ", Buf2[2], ", ", Buf2[3], ", ", Buf2[4], ", ", Buf2[5], ",", Buf2[6], ", ", ", ", Buf2[7], ", ", ", Buf2[8], ", ", ", Buf2[9], ", ", Buf2[10], ", ", Buf2[11], ", ", Buf2[12], ", ", Buf2[13], ", ", Buf2[14], ", Buf2[15]); */
Was ist hier los? Ohne das Schreiben nach /* funktioniert alles gut...
Leute, was ist der beste Weg, um es zu tun: Ich möchte die Verteilung der Strikes von verlorenen und profitablen Trades sehen... Ich bin nicht gut in Arrays.
Nach einem verlorenen Verkauf
Price_LastSell=5; Vol=Vol*Y; Izm=2; Opn_B=true; k=k+1;
/* Buf1[p]=Buf1[p]+1; p=0;
Alert ("Profitable ", Buf1[1], ", ", Buf1[2], ", ", Buf1[3], ", ", Buf1[4], ", ", Buf1[5], ", ", Buf1[6], ", ", Buf1[7], ", ", Buf1[8], ", Buf1[9], ", Buf1[10]); */
nach dem gewinnbringenden Verkauf
Price_LastSell=5; Vol=VolumeOpen; Izm=2; Opn_S=true; p=p+1;
/* Buf2[k]=Buf2[k]+1; k=0;
Alert ("Verluste ", Buf2[1], ", ", Buf2[2], ", ", Buf2[3], ", ", Buf2[4], ", ", Buf2[5], ",", Buf2[6], ", ", ", ", Buf2[7], ", ", ", Buf2[8], ", ", ", Buf2[9], ", ", Buf2[10], ", ", Buf2[11], ", ", Buf2[12], ", ", Buf2[13], ", ", Buf2[14], ", Buf2[15]); */
Was ist hier los? Ohne das Schreiben nach /* funktioniert alles gut...
Eine Reihe von Verlust- und Gewinngeschäften. Verteilung - zum Beispiel haben wir 360 Verlustgeschäfte (dies ist im Bericht zu sehen), 110 Serien von 1 Verlustgeschäft, 80 Serien von 2 Verlustgeschäften und 30 von 3 Verlustgeschäften.
Ich habe es so gemacht:
Nach der Identifizierung des Verlustgeschäfts
k=k+1;
Nach der Bestimmung eines profitablen Handels
wenn k==1 {k1=k1+1;}
wenn k==2 {k2=k2+1;}
wenn k==3 {k3=k3+1;}
k=0;
Aber dieser Eintrag ist zu groß und unpraktisch für Serien von 15 oder mehr Verlusten
Eine Reihe von Verlust- und Gewinngeschäften. Verteilung - zum Beispiel haben wir 360 Verlustgeschäfte (dies ist im Bericht zu sehen), 110 Serien von 1 Verlustgeschäft, 80 Serien von 2 Verlustgeschäften und 30 von 3 Verlustgeschäften.
Ich habe es so gemacht:
Nach der Identifizierung des Verlustgeschäfts
k=k+1;
Nach der Bestimmung eines profitablen Handels
wenn k==1 {k1=k1+1;}
wenn k==2 {k2=k2+1;}
wenn k==3 {k3=k3+1;}
k=0;
Aber diese Notation ist zu groß und unbequem für Serien von 15 oder mehr Verlusten
Mir ist nicht ganz klar, was Ihre Aufgabe ist.
Müssen Sie die Reihen der letzten gewinnbringenden/verlustbringenden Positionen ermitteln, oder müssen Sie alle diese Reihen aus der gesamten Handelshistorie sammeln?
Habe dies getan, jetzt öffnet es sich nicht bei jedem Tick, sondern gibt Signale an den Eingang weiter...
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()
{
for(int i=OrdersTotal()-1; i>=0; i--) //Цикл по всем ордерам
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) //Выбрали ордер
{
if(OrderType()==OP_BUY)
{
TotalBiu++; //Кол. покупок
}
if(OrderType()==OP_SELL)
{
TotalSell++; //Кол. продаж
}
}
}
double rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,0);
double rsi1=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,1);
//+------------------------------------------------------------------+
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(TotalBiu==0)
if(OrderBuy<1 && rsi>Urov_70 && rsi1<Urov_70)
{
tiket=OrderSend(_Symbol,OP_BUY,Lot,Ask,slippage,slBuy,tpBuy,NULL,MagicNumber,0,clrBlue);
}
if(TotalSell==0)
if(OrderSell<1 && rsi<Urov_30 && rsi1>Urov_30)
{
tiket=OrderSend(_Symbol,OP_SELL,Lot,Bid,slippage,slSell,tpSell,NULL,MagicNumber,0,clrRed);
}
}
//+------------------------------------------------------------------+
Ich habe es optimiert. Sollte funktionieren.
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()
{
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 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)
{
tiket=OrderSend(_Symbol,OP_BUY,Lot,Ask,slippage,slBuy,tpBuy,NULL,MagicNumber,0,clrBlue);
if(ticket<0)Print("Ошибка открытия ордера № - ",GetLastError());
}
if(OrderSell==0 && rsi<Urov_30 && rsi1>Urov_30)
{
tiket=OrderSend(_Symbol,OP_SELL,Lot,Bid,slippage,slSell,tpSell,NULL,MagicNumber,0,clrRed);
if(ticket<0)Print("Ошибка открытия ордера № - ",GetLastError());
}
}
//+------------------------------------------------------------------+
...
Repariert. Es sollte funktionieren.
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
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);
//+------------------------------------------------------------------+
Sie müssen die hervorgehobenen Werte irgendwie auf Null setzen.
double slSell,slBuy,tpSell,tpBuy;
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);
//+------------------------------------------------------------------+
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)
{
tiket=OrderSend(_Symbol,OP_BUY,Lot,Ask,slippage,slBuy,tpBuy,NULL,MagicNumber,0,clrBlue);
if(ticket<0)Print("Ошибка открытия ордера № - ",GetLastError());
}
if(OrderSell==0 && rsi<Urov_30 && rsi1>Urov_30)
{
tiket=OrderSend(_Symbol,OP_SELL,Lot,Bid,slippage,slSell,tpSell,NULL,MagicNumber,0,clrRed);
if(ticket<0)Print("Ошибка открытия ордера № - ",GetLastError());
}
}
//+------------------------------------------------------------------+
Sie müssen sich auf die hervorgehobenen
double slSell,slBuy,tpSell,tpBuy;
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);
//+------------------------------------------------------------------+
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)
{
tiket=OrderSend(_Symbol,OP_BUY,Lot,Ask,slippage,slBuy,tpBuy,NULL,MagicNumber,0,clrBlue);
if(ticket<0)Print("Ошибка открытия ордера № - ",GetLastError());
}
if(OrderSell==0 && rsi<Urov_30 && rsi1>Urov_30)
{
tiket=OrderSend(_Symbol,OP_SELL,Lot,Bid,slippage,slSell,tpSell,NULL,MagicNumber,0,clrRed);
if(ticket<0)Print("Ошибка открытия ордера № - ",GetLastError());
}
}
//+------------------------------------------------------------------+
Danke. Jetzt öffnet einige Aufträge nicht auf Signal und einige nicht korrekt.
Repariert. Es sollte funktionieren.
...
Ich danke Ihnen. Jetzt öffnet einige Aufträge nicht auf Signal und einige nicht korrekt.
Sie prüfen auf einen bestehenden Balken double rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,0);
Der Kurs steigt, die 70er-Marke wird überschritten, und Sie steigen in den Handel ein. 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);