Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 873

 
Лауреат:

Non l'ho trovato su YouTube, la documentazione è per i più intelligenti.

Youtube è la nostra cosa? Sai anche dove si trova il nord-sud su YouTube?

 

Quando l'EA viene avviato, due medie mobili vengono aggiunte al grafico ( funzione ChartIndicatorAdd). Entrambe le medie mobili sono disegnate in rosso. Come posso colorarli programmaticamente?

 
Kvin_:

Quando l'EA viene avviato, due medie mobili vengono aggiunte al grafico ( funzione ChartIndicatorAdd). Entrambe le medie mobili sono disegnate in rosso. Come dipingerli programmaticamente in altri colori?

L'aiuto è molto chiaro:

Quando create un handle per l'indicatore con cui state lavorando, potete specificare un parametro sulla linea:

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

YouTube è il nostro tutto? Sai anche dove si trova il nord-sud dai video di YouTube?

Certo che sei intelligente.

 
Kvin_:

Quando l'EA viene avviato, due medie mobili vengono aggiunte al grafico ( funzione ChartIndicatorAdd). Entrambe le medie mobili sono disegnate in rosso. Come dipingerli programmaticamente in altri colori?

Usa l'indicatore personalizzato che ha un'impostazione speciale: il colore.

Esempio nel codice delcolore di ingresso della media mobile personalizzata:

Usando l'incrocio di due iMA come esempio, la chiamata dei tre indicatori è ora visivamente distinta nel tester visivo della strategia:

Incrocio di due iMA

 
Vladimir Karputov:

Usa un indicatore personalizzato che ha un'impostazione speciale: il colore.

Esempio nel codice delcolore di ingresso della media mobile personalizzata:

Usando l'incrocio di due iMA come esempio, la chiamata dei tre indicatori è ora visivamente distinta nel tester visivo della strategia:

Proprio quello di cui ho bisogno. Grazie!
 

Non riesco ad azzeccare il fattore di moltiplicazione del lotto.

In precedenza nel codebase EA moltiplicava il lotto precedente per 2.

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());

L'ho cambiato 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());


Ho sbagliato il volume del lotto

 
ilyav:

Non riesco ad azzeccare il fattore di moltiplicazione del lotto.

In precedenza nel codebase EA moltiplicava il lotto precedente per 2.

L'ho cambiato in

Ricevo il volume del lotto sbagliato

Dopo aver fatto l'aritmetica, dovreste regolare il volume del lotto al passo del volume del lotto per quel simbolo.

Esempio: calcolo del lotto diCoin Flip e controllo per 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;
     }
//---
  }
 

ciao una tale domanda:

è possibile cambiare dinamicamente il numero di buffer/linee in un indicatore?

 
Andrii Djola:

ciao una tale domanda:

È possibile cambiare dinamicamente il numero di buffer/linee in un indicatore?

Non si può.