Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 873

 
Лауреат:

Ich konnte es nicht auf YouTube finden. Die Dokumentation ist nur für die Schlauen.

Youtube ist unser Ding? Weißt du auch, wo Nord-Süd auf YouTube zu finden ist?

 

Wenn der EA gestartet wird, werden zwei gleitende Durchschnitte zum Chart hinzugefügt (ChartIndicatorAdd-Funktion). Beide gleitenden Durchschnitte sind in rot eingezeichnet. Wie kann ich sie programmatisch einfärben?

 
Kvin_:

Wenn der EA gestartet wird, werden zwei gleitende Durchschnitte zum Chart hinzugefügt (ChartIndicatorAdd-Funktion). Beide gleitenden Durchschnitte sind in rot eingezeichnet. Wie kann man sie programmatisch in anderen Farben malen?

Die Hilfe ist sehr übersichtlich:

Wenn Sie einen Handle für den Indikator erstellen, mit dem Sie arbeiten, können Sie einen Parameter in der Zeile angeben:

indicator_handle=iMACD(symbol,period,fast_ema_period,slow_ema_period,signal_period,apr);
 
Artyom Trishkin:

Ist YouTube unser Ein und Alles? Weißt du auch aus YouTube-Videos, wo Nord-Süd liegt?

Natürlich sind Sie klug.

 
Kvin_:

Wenn der EA gestartet wird, werden zwei gleitende Durchschnitte zum Chart hinzugefügt (ChartIndicatorAdd-Funktion). Beide gleitenden Durchschnitte sind in rot eingezeichnet. Wie kann man sie programmatisch in anderen Farben malen?

Verwenden Sie einen benutzerdefinierten Indikator, der eine spezielle Einstellung hat: Farbe.

Beispiel imFarbcode für die benutzerdefinierte gleitende Durchschnittseingabe:

Am Beispiel derKreuzung von zwei iMAs ist der Aufruf der drei Indikatoren im visuellen Strategietester nun deutlich erkennbar:

Kreuzung von zwei iMAs

 
Vladimir Karputov:

Verwenden Sie einen benutzerdefinierten Indikator, der eine spezielle Einstellung hat: Farbe.

Beispiel imFarbcode für die benutzerdefinierte gleitende Durchschnittseingabe:

Am Beispiel derKreuzung von zwei iMAs ist der Aufruf der drei Indikatoren im visuellen Strategietester nun deutlich erkennbar:

Genau das, was ich brauche. Ich danke Ihnen!
 

Ich kann den Multiplikationsfaktor für das Los nicht richtig berechnen.

Zuvor wurde in der Codebase EA das vorherige Los mit 2 multipliziert.

if(last_position_type==POSITION_TYPE_BUY && m_symbol.Bid()+count_positions*ExtStep<last_position_price_open)
         m_trade.Sell(last_position_volume*2,m_symbol.Name());

Ich habe es geändert in

input double   KLot              = 1.5;     //Коэффициент умножения лота
//------------------------------------------
if(last_position_type==POSITION_TYPE_BUY && m_symbol.Bid()+count_positions*ExtStep<last_position_price_open)
         m_trade.Sell(last_position_volume*KLot,m_symbol.Name());


Ich bekomme falsches Losvolumen

 
ilyav:

Ich kann den Multiplikationsfaktor für das Los nicht richtig berechnen.

Zuvor wurde in der Codebase EA das vorherige Los mit 2 multipliziert.

Ich habe es geändert in

Ich bekomme die falsche Losgröße

Nachdem Sie die Berechnung durchgeführt haben, sollten Sie das Losvolumen an die Losvolumenstufe für dieses Symbol anpassen.

Beispiel:Coin Flip Losberechnung und Prüfung auf BUY

//+------------------------------------------------------------------+
//| Open Buy position                                                |
//+------------------------------------------------------------------+
void OpenBuy(double sl,double tp)
  {
   sl=m_symbol.NormalizePrice(sl);
   tp=m_symbol.NormalizePrice(tp);

   double check_open_long_lot=0.0;
   if(Risk>0.0)
     {
      check_open_long_lot=m_money.CheckOpenLong(m_symbol.Ask(),sl);
      Print("sl=",DoubleToString(sl,m_symbol.Digits()),
            ", CheckOpenLong: ",DoubleToString(check_open_long_lot,2),
            ", Balance: ",    DoubleToString(m_account.Balance(),2),
            ", Equity: ",     DoubleToString(m_account.Equity(),2),
            ", FreeMargin: ", DoubleToString(m_account.FreeMargin(),2));
      if(check_open_long_lot==0.0)
        {
         Print(__FUNCTION__,", ERROR: method CheckOpenLong returned the value of \"0.0\"");
         return;
        }
     }
   else
      check_open_long_lot=InpLots;
   if(last_lots_sl>0.0)
      check_open_long_lot=last_lots_sl*InpMartingale;
   if(check_open_long_lot>InpMaxLots)
     {
      Print(__FUNCTION__,", ERROR: check_open_long_lot (",DoubleToString(check_open_long_lot,2),") > \"Max lots\" (",DoubleToString(check_open_long_lot,2),")");
      ExpertRemove();
      return;
     }
   check_open_long_lot=LotCheck(check_open_long_lot);
   if(check_open_long_lot==0)
     {
      Print(__FUNCTION__,", ERROR: LotCheck -> 0.0");
      return;
     }
//--- check volume before OrderSend to avoid "not enough money" error (CTrade)
   double check_volume_lot=m_trade.CheckVolume(m_symbol.Name(),check_open_long_lot,m_symbol.Ask(),ORDER_TYPE_BUY);
   if(check_volume_lot!=0.0)
     {
      if(check_volume_lot>=check_open_long_lot)
        {
         if(m_trade.Buy(check_open_long_lot,NULL,m_symbol.Ask(),sl,tp))
           {
            if(m_trade.ResultDeal()==0)
              {
               Print("#1 Buy -> false. Result Retcode: ",m_trade.ResultRetcode(),
                     ", description of result: ",m_trade.ResultRetcodeDescription());
               PrintResult(m_trade,m_symbol);
              }
            else
              {
               Print("#2 Buy -> true. Result Retcode: ",m_trade.ResultRetcode(),
                     ", description of result: ",m_trade.ResultRetcodeDescription());
               PrintResult(m_trade,m_symbol);
              }
           }
         else
           {
            Print("#3 Buy -> false. Result Retcode: ",m_trade.ResultRetcode(),
                  ", description of result: ",m_trade.ResultRetcodeDescription());
            PrintResult(m_trade,m_symbol);
           }
        }
      else
        {
         string text="";
         if(Risk>0.0)
            text="< method CheckOpenLong ("+DoubleToString(check_open_long_lot,2)+")";
         else
            text="< Lots ("+DoubleToString(InpLots,2)+")";
         Print(__FUNCTION__,", ERROR: method CheckVolume (",DoubleToString(check_volume_lot,2),") ",
               text);
         return;
        }
     }
   else
     {
      Print(__FUNCTION__,", ERROR: method CheckVolume returned the value of \"0.0\"");
      return;
     }
//---
  }
 

Hallo, eine solche Frage:

Ist es möglich, die Anzahl der Puffer/Zeilen in einem Indikator dynamisch zu ändern?

 
Andrii Djola:

Hallo, eine solche Frage:

Ist es möglich, die Anzahl der Puffer/Zeilen in einem Indikator dynamisch zu ändern?

Das können Sie nicht.

Grund der Beschwerde: