Selecione um símbolo nas configurações - página 2

 
Alexey Viktorov:

Estamos falando de algo diferente.

Sim. No corpo do programa é fácil.

E estou falando de selecionar parâmetros para otimização, na aba de parâmetros do testador.

input  ... это показывает)

É aí que seria muito conveniente ter uma lista de símbolos da "visão geral do mercado".

Você também não precisa converter nada lá. Basta dar à lista pública, a lista interna já preparada...

 

acrescentou mais, casais

 
enum Enum_Symbol {EURUSD,GBPUSD,USDCHF,USDJPY,USDCAD,AUDUSD,AUDNZD,AUDCAD,AUDCHF,AUDJPY,
                  CHFJPY,EURGBP,EURAUD,EURCHF,EURJPY,EURNZD,EURCAD,GBPCHF,GBPJPY,CADCHF
                 };
//--- Входящие параметры
input  Enum_Symbol     SIMBOL_1                 = EURUSD;         // Пара
input  Enum_Symbol     SIMBOL_2                 = EURUSD;         // Пара
input  Enum_Symbol     SIMBOL_3                 = EURUSD;         // Пара
 
Aleksandr Klapatyuk:

acrescentou mais, casais.

Sim, bem, alguém vai precisar disso)

Agora só falta sincronizar a janela "visão geral do mercado" com esta lista... Creio que tal possibilidade foi mencionada em algum lugar, se não estou enganado.

Mas seria mais fácil ter uma lista pronta!

 
Alexey Viktorov:

Não estamos falando da mesma coisa.

Eu colei seu código - para contar todos os pares abertos e subtrair o lote correto. mas acho que estou sendo tolo aqui - talvez este código não caiba aqui ?

 
 

Mas isso muda o lote.

//+------------------------------------------------------------------+
//| Calculate optimal lot size                                       |
//+------------------------------------------------------------------+
double TradeSizeOptimized(void)
  {
   double price=0.0;
   double margin=0.0;
   string arr[];
   int resize = 0, syTotal = SymbolsTotal(true);
   for(int i = 0; i < syTotal; i++)
     {
      string name = SymbolName(i, true);
      if(SymbolInfoInteger(name, SYMBOL_VISIBLE))
        {
         resize = ArrayResize(arr, i+1);
         arr[i] = name;
        }
      //--- select lot size

      if(!SymbolInfoDouble(arr[i],SYMBOL_ASK,price))
         return(0.0);
      if(!OrderCalcMargin(ORDER_TYPE_BUY,arr[i],1.0,price,margin))
         return(0.0);
      if(margin<=0.0)
         return(0.0);
     }
   double lot=NormalizeDouble(AccountInfoDouble(ACCOUNT_MARGIN_FREE)*MaximumRisk/margin,2);
//--- calculate number of losses orders without a break
   if(DecreaseFactor>0)
     {
      //--- select history for access
      HistorySelect(0,TimeCurrent());
      //---
      int    orders=HistoryDealsTotal();  // total history deals
      int    losses=0;                    // number of losses orders without a break

      for(int y=orders-1; y>=0; y--)
        {
         ulong ticket=HistoryDealGetTicket(y);
         if(ticket==0)
           {
            Print("HistoryDealGetTicket failed, no trade history");
            break;
           }
         for(int i = 0; i < syTotal; i++)
           {
            string name = SymbolName(i, true);
            if(SymbolInfoInteger(name, SYMBOL_VISIBLE))
              {
               resize = ArrayResize(arr, i+1);
               arr[i] = name;
              }
            //--- check symbol
            if(HistoryDealGetString(ticket,DEAL_SYMBOL)!=arr[i])
               continue;
            //--- check Expert Magic number
            if(HistoryDealGetInteger(ticket,DEAL_MAGIC)!=MA_MAGIC)
               continue;
            //--- check profit
            double profit=HistoryDealGetDouble(ticket,DEAL_PROFIT);
            if(profit>0.0)
               break;
            if(profit<0.0)
               losses++;
           }
        }
      //---
      if(losses>1)
         lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);
     }
   for(int i = 0; i < syTotal; i++)
     {
      string name = SymbolName(i, true);
      if(SymbolInfoInteger(name, SYMBOL_VISIBLE))
        {
         resize = ArrayResize(arr, i+1);
         arr[i] = name;
        }
      //--- normalize and check limits
      double stepvol=SymbolInfoDouble(arr[i],SYMBOL_VOLUME_STEP);
      lot=stepvol*NormalizeDouble(lot/stepvol,0);
      double minvol=SymbolInfoDouble(arr[i],SYMBOL_VOLUME_MIN);
      if(lot<minvol)
         lot=minvol;
      double maxvol=SymbolInfoDouble(arr[i],SYMBOL_VOLUME_MAX);
      if(lot>maxvol)
         lot=maxvol;
     }
//--- return trading volume
   return(lot);
  }
//+------------------------------------------------------------------+
 

Não sei se é o seu código que está fazendo isso.

Snapshot222

 
Михаил:

Sim, alguém vai precisar disso).

Agora só falta sincronizar a janela "visão geral do mercado" com esta lista... Creio que esta possibilidade foi mencionada em algum lugar, se não estou enganado.

Mas seria mais fácil ter uma lista pronta!

Isto seria adequado para um testador. criar um Expert Advisor e testá-lo com muitos pares

 
Aleksandr Klapatyuk:

Eu colei seu código - para contar todos os pares abertos e subtrair o lote correto. mas acho que estou sendo tolo aqui - talvez este código não caiba aqui ?

Mas isso muda o lote.

Eu não sei se é o seu código.



E se você fixar o lucro fechando negócios? )) Quando o verde já se afastou do azul? Por n-ésimo valor? No final, pode se tornar mais alegre?

 
Alexey Viktorov:

Não estamos falando da mesma coisa.

como utilizá-lo corretamente ?

para poder usá-lo, é assim.

enum Enum_Symbol {EURUSD,GBPUSD,USDCHF,USDJPY,USDCAD,AUDUSD,AUDNZD,AUDCAD,AUDCHF,AUDJPY,
                  CHFJPY,EURGBP,EURAUD,EURCHF,EURJPY,EURNZD,EURCAD,GBPCHF,GBPJPY,CADCHF
                 };
//--- Входящие параметры
input Enum_Symbol     SIMBOL_1                 = EURUSD;  // Пара
input Enum_Symbol     SIMBOL_2                 = EURUSD;  // Пара
input Enum_Symbol     SIMBOL_3                 = EURUSD;  // Пара

você tem que fazer algo mais para que funcione.

como usamos seu código?

//+------------------------------------------------------------------+
//| function                                                         |
//+------------------------------------------------------------------+
void XXXXXX()
  {
   string arr[];
   int resize = 0, syTotal = SymbolsTotal(true);
   for(int i = 0; i < syTotal; i++)
     {
      string name = SymbolName(i, true);
      if(SymbolInfoInteger(name, SYMBOL_VISIBLE))
        {
         resize = ArrayResize(arr, i+1);
         arr[i] = name;
        }
     };
  };
//+------------------------------------------------------------------+
 
Aleksandr Klapatyuk:

como utilizá-lo corretamente ?

A fim de utilizá-lo desta forma.

você tem que fazer algo mais para que funcione.

Como eu uso seu código?


Preencha um conjunto de caracteres e trabalhe com esse conjunto.

Aqui está uma EA gratuita usando este pedaço de código ***


ps; tumblr, você deveria ter removido o elo por nada. Entre meus produtos no mercado, apenas DOIS são pagos. Uma de 2017 foi alugada 4 vezes e a outra de 2014 por 10 libras não foi comprada uma única vez. Portanto, não há nenhuma publicidade a ser esperada aqui.

 
Alexey Viktorov:

... drubashka, você não deveria ter excluído o link....

Como os moderadores estão lendo o fórum, podemos esperar que tal lista apareça!

 
Alexey Viktorov:

Preencha a matriz de caracteres e trabalhe com essa matriz.

Há uma EA gratuita usando o código acima ***


ps; drubashka, você não deveria ter removido o link. Entre meus produtos no mercado, apenas DOIS são pagos. Uma de 2017 foi alugada 4 vezes, e a outra de 2014 por 10 libras não foi comprada uma única vez. Portanto, não há nenhuma publicidade a ser esperada aqui.

Infelizmente você não pode discutir nada do Marketplace no fórum, seja pago ou gratuito. Já foi dito uma centena de vezes. Se você tiver tempo, você mesmo pode pesquisá-lo.