[ARCHIV!] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen - 4. - Seite 121

 

Wo kann man den Trailing Stop und den Breakeven-Output hinzufügen? und es erhöht nicht das Lot, wenn man die Einzahlung erhöht

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

int Buy (int StopLoss = 0, int TakeProfit = 0, double Lot = 0)

{

int Ticket = 0;

double SL = 0;

double TP = 0;

double VolumeLot = 0;

RefreshRates();

wenn (StopLoss != 0)

SL = NormalizeDouble(Bid-StopLoss*Point, Digits);

wenn (TakeProfit != 0)

TP = NormalizeDouble(Ask+TakeProfit*Point, Digits);

wenn (Los == 0)

VolumenLos = GetLos ();

sonst

VolumenLos = Los;

Ticket = OrderSend(Symbol(), OP_BUY, VolumeLot, NormalizeDouble(Ask, Digits), 20, SL, TP, NULL, AccountNumber(), 0, Green);

wenn (Ticket == -1)

{

return (GetLastError ();

}

sonst

{

zurück (Ticket);

}

}

int Sell (int StopLoss = 0, int TakeProfit = 0, double Lot = 0)

{

int Ticket = 0;

double SL = 0;

double TP = 0;

double VolumeLot = 0;

RefreshRates();

wenn (StopLoss != 0)

SL = NormalizeDouble(Ask+StopLoss*Point, Digits);

wenn (TakeProfit != 0)

TP = NormalizeDouble(Bid-TakeProfit*Point, Digits);

wenn (Los == 0)

VolumenLos = GetLos ();

sonst

VolumenLos = Los;

Ticket = OrderSend(Symbol(), OP_SELL, VolumeLot, NormalizeDouble(Bid, Digits), 20, SL, TP, NULL, AccountNumber(), 0, Red);

wenn (Ticket == -1)

return (GetLastError ();

sonst

zurück (Ticket);

}

double GetLot ()

{

int lot;

wenn (Kontostand()>=300) lot=0.01;

wenn (Kontostand()>=500) lot=0.02;

wenn (Kontostand()>=800) lot=0.03;

zurück (Los);

}

 
mahla:

Wo kann man den Trailing Stop und den Breakeven-Output hinzufügen? und es erhöht nicht das Lot, wenn man die Einzahlung erhöht

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

Im Berater

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+

Funktionslos erhöhen...... ist wahrscheinlich besser zu ändern

Beispiel:

extern double Lots               = 0.1;
extern double MaximumRisk        = 0.02;
extern double DecreaseFactor     = 3;
//////
//+------------------------------------------------------------------+
//| Calculate optimal lot size                                       |
//+------------------------------------------------------------------+
double LotsOptimized()
  {
   double lot=Lots;
   int    orders=HistoryTotal();     // history orders total
   int    losses=0;                  // number of losses orders without a break
//---- select lot size
   lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1);
//---- calcuulate number of losses orders without a break
   if(DecreaseFactor>0)
     {
      for(int i=orders-1;i>=0;i--)
        {
         if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error in history!"); break; }
         if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) continue;
         //----
         if(OrderProfit()>0) break;
         if(OrderProfit()<0) losses++;
        }
      if(losses>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);
     }
//---- return lot size
   if(lot<0.1) lot=0.1;
   return(lot);
  }

Siehe Gleitender Durchschnitt.mq4

 

Können Sie mir bitte sagen, wie man die Bollinger-Bänder für das Momentum und nicht für den Preis verwendet? Ich habe es so versucht:

BandOPeriodT - externe Variable, Periode der Bollinger-Bänder.

MomentumPeriodT - Periode des Momentums.

BandOBottom=iBands (NULL,0,BandOPeriodT,1,0,iMomentum(NULL,0,MomentumPeriodT,PRICE_OPEN,0),MODE_LOWER,0);

und auch so:

MomO=iMomentum(NULL,0,MomentumPeriodT,PRICE_OPEN,0); - interne Variable, die den Wert zurückgibt

BandOBottom=iBands(NULL,0,BandOPeriodT,1,0,MomO,MODE_LOWER,0); - die Variable soll den Wert der unteren Bollinger-Linie für den vorherigen Variablenwert zurückgeben.

Gehe ich recht in der Annahme, dass MODE_LOWER bedeutet, dass ich den Wert von BOLLINGER BOLLINGER in einer Variablen erhalte? Wenn nicht, wie bekomme ich es genau?

 
Ovari:

Können Sie mir bitte sagen, wie man die Bollinger-Bänder für das Momentum und nicht für den Preis verwendet? Ich habe es so versucht:

BandOPeriodT - externe Variable, Periode der Bollinger-Bänder.

MomentumPeriodT - Periode des Momentums.

BandOBottom=iBands (NULL,0,BandOPeriodT,1,0,iMomentum(NULL,0,MomentumPeriodT,PRICE_OPEN,0),MODE_LOWER,0);

und auch so:

MomO=iMomentum(NULL,0,MomentumPeriodT,PRICE_OPEN,0); - interne Variable, die den Wert zurückgibt

BandOBottom=iBands(NULL,0,BandOPeriodT,1,0, MomO,MODE_LOWER,0); - die Variable sollte den Wert der unteren Bollinger-Linie für den vorherigen Variablenwert zurückgeben.

Gehe ich recht in der Annahme, dass MODE_LOWER bedeutet, dass ich den Wert von BOLLINGER BOLLINGER in einer Variablen erhalte? Wenn nicht, wie bekomme ich es genau?


Siehe Anhänger - dort Bänder für RSI - machen Sie dasselbe für Momentum.

Beschreibung - im Protokoll - siehe Code am Anfang.

 
Vielen Dank, denn ich bin sehr neu, und auch kein großer Programmierer:)
 

Hallo! Bitte helfen Sie! Ich möchte den PVT-Indikator ausprobieren:

double PVT = iCustom(NULL,240,"PVT",PRICE_CLOSE,1,1)

Können Sie mir bitte sagen, was fehlt?

Es sagt: 2012.05.14 19:34:46 Kann die Datei 'C:\Programmdateien\Alpari NZ MT4\experts\indicators\PVT.ex4' auf dem EURUSD,H4 nicht öffnen

Ich danke Ihnen!

 
mahla:

Wo kann man den Trailing Stop und den Breakeven-Output hinzufügen? und es erhöht nicht das Lot, wenn man die Einzahlung erhöht

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

int Buy (int StopLoss = 0, int TakeProfit = 0, double Lot = 0)

{

int Ticket = 0;

double SL = 0;

double TP = 0;

double VolumeLot = 0;

RefreshRates();

wenn (StopLoss != 0)

SL = NormalizeDouble(Bid-StopLoss*Point, Digits);

wenn (TakeProfit != 0)

TP = NormalizeDouble(Ask+TakeProfit*Point, Digits);

wenn (Los == 0)

VolumenLos = GetLos ();

sonst

VolumenLos = Los;

Ticket = OrderSend(Symbol(), OP_BUY, VolumeLot, NormalizeDouble(Ask, Digits), 20, SL, TP, NULL, AccountNumber(), 0, Green);

wenn (Ticket == -1)

{

return (GetLastError ();

}

sonst

{

zurück (Ticket);

}

}

int Sell (int StopLoss = 0, int TakeProfit = 0, double Lot = 0)

{

int Ticket = 0;

double SL = 0;

double TP = 0;

double VolumeLot = 0;

RefreshRates();

wenn (StopLoss != 0)

SL = NormalizeDouble(Ask+StopLoss*Point, Digits);

wenn (TakeProfit != 0)

TP = NormalizeDouble(Bid-TakeProfit*Point, Digits);

wenn (Los == 0)

VolumenLos = GetLos ();

sonst

VolumenLos = Los;

Ticket = OrderSend(Symbol(), OP_SELL, VolumeLot, NormalizeDouble(Bid, Digits), 20, SL, TP, NULL, AccountNumber(), 0, Red);

wenn (Ticket == -1)

return (GetLastError ();

sonst

zurück (Ticket);

}

double GetLot ()

{

int lot;

wenn (Kontostand()>=300) lot=0.01;

wenn (Kontostand()>=500) lot=0.02;

wenn (Kontostand()>=800) lot=0.03;

zurück (Los);

}

Gehen wir davon aus, dass die offene Position bereits ausgewählt wurde und wir sicher wissen, dass diese Position für das Symbol, an das der Expert Advisor gebunden ist, geöffnet ist
. Gehen Sie außerdem davon aus, dass der Wert des Trailing-Stops
in Pips in der Variable TrailingStop enthalten ist.

   int err;
   if (OrderType() == OP_BUY)
     {
       // позиция на покупку
       if ((Bid-OrderOpenPrice())>=(TrailingStop*Point))
         {
           // выставляем Stop Loss
           if (OrderModify(OrderTicket(), OrderOpenPrice(), Bid-TrailingStop*Point,
                                    OrderTakeProfit(), 0))
             Print("#", OrderTicket(),": trailing stop ", Bid-TrailingStop*Point);
           else
             {
              err = GetLastError();
              Print("#", OrderTicket(),": trailing stop error ", err);
             }
         }
     }
   else
     {
       // позиция на продажу
       if ((OrderOpenPrice()-Ask)>=(TrailingStop*Point))
         {
           // выставляем Stop Loss
           if (OrderModify(OrderTicket(), OrderOpenPrice(), Ask+TrailingStop*Point,
                                    OrderTakeProfit(), 0))
             Print("#", OrderTicket(),": trailing stop ", Ask+TrailingStop*Point);
           else
             {
              err = GetLastError();
              Print("#", OrderTicket(),": trailing stop error ", err);
             }
         }
     }
Die Funktion OrderProfit() gibt den Gewinn für die mit der Funktion OrderSelect() ausgewählte Order zurück.

Angenommen, wir wollen den Gewinn berechnen, den wir mit geschlossenen Positionen erzielt haben.

   int profit = 0;
   int pos;
   for ( pos = 0; pos<HistoryTotal(); pos++ )
     {
       // выделим позицию
       if (OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY) == true)
         {
           // это не отложенный ордер?
           if ( OrderType() <= OP_SELL) profit += OrderProfit();            
         }
       else
           Print("Ошибка ", GetLastError(), " при выделении ордера ", OrderTicket());
     }
   Print("Суммарный профит по закрытым позициям = ", profit);
Und der vollständige Code, der den Gewinn für alle geschlossenen Positionen berechnet,
, die heute eröffnet werden, wird sein:

   //---- вычислим начало дня - переменная day_start
   int c_time = CurTime();  
   datetime day_start;
   day_start=c_time-TimeHour(c_time)*60*60-TimeMinute(c_time)*60-TimeSeconds(c_time);
   //---- подсчитаем прибыль
   int profit = 0;
   int pos;
   for ( pos = 0; pos<HistoryTotal(); pos++ )
     {
       // выделим позицию
       if (OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY) == true)
         {
           // это не отложенный ордер?
           if ( OrderType() <= OP_SELL)
             {
               // ордер был открыт сегодня?
               if (OrderOpenTime()>=day_start) profit += OrderProfit();
             }
         }
       else
           Print("Ошибка ", GetLastError(), " при выделении ордера ", OrderTicket());
     }
   Print("Суммарный профит по закрытым позициям = ", profit);
 
mahla:

Und die Losgröße wird nicht erhöht, wenn Sie die Einzahlung erhöhen.

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


Vielleicht fehlt noch etwas im Code:

double OrderLots( )
Gibt die Anzahl der Lose für den ausgewählten Auftrag zurück.
Die Bestellung muss mit OrderSelect() vorausgewählt werden.
Beispiel:
 if(OrderSelect(10,SELECT_BY_POS)==true) Print("Lose für die Bestellung 10 ",OrderLots()); else Print("OrderSelect() hat einen Fehler geliefert - ",GetLastError());
 
borilunad:

Hallo! Bitte helfen Sie! Ich möchte den PVT-Indikator ausprobieren:

Können Sie mir bitte sagen, was fehlt?

Es sagt: 2012.05.14 19:34:46 Kann die Datei 'C:\Programmdateien\Alpari NZ MT4\experts\indicators\PVT.ex4' auf dem EURUSD,H4 nicht öffnen

Ich danke Ihnen!

Der PVT-Indikator selbst fehlt (sind Sie sicher, dass Sie einen haben?).
 
alsu:
Der PVT-Indikator selbst fehlt (sind Sie sicher, dass Sie einen haben?).

Natürlich habe ich es und es ist kompiliert und eh4. Und tragen Sie es auch in die Tabelle ein. Vielleicht habe ich etwas falsch geschrieben? Ich danke Ihnen!
Grund der Beschwerde: