Pergunta do assessor multimoedas

 

Boa noite!

Estou pensando em combinar dois pares em um único EA. Já o fiz.

Mas de repente eu tive dúvidas. Eu o fiz assim:

extern bool    GBP=true;
extern bool    EUR=true;
- - - - - - - - - - - - - - - - - - - -
int start()
  {
double A = iRSI("GBPUSD", 0, .....);
double B = iRSI("GBPUSD", 0, .....);
 
double C = iRSI("EURUSD", 0, .....);
double D = iRSI("EURUSD", 0, .....);
//------------------------------------------------------
if (GBP) {//если есть разрешение true
if (A<B)
{
double   BID = MarketInfo("GBPUSD", MODE_BID);
 double   ASK = MarketInfo("GBPUSD", MODE_ASK);
 double POINT =MarketInfo("GBPUSD",MODE_POINT);
(ticket=OrderSend .... //ПОКУПАЕМ/ПРОДАЕМ...)     }}}
//----------------------------------------------------------  
if (EUR) { //если есть разрешение true
if (C>D)
{
double   BID = MarketInfo("EURUSD", MODE____BID);
 double   ASK = MarketInfo("EURUSD", MODE____ASK);
 double POINT =MarketInfo("EURUSD",MODE____POINT);
(ticket=OrderSend .... //ПОКУПАЕМ/ПРОДАЕМ...)      }}}
//------------------------------------------------------------
return(0);  
  }

Em linha e no Testador de Estratégia tudo funciona! Talvez esta não seja exatamente a maneira correta de fazê-lo:

extern bool    GBP=true;
extern bool    EUR=true;
- - - - - - - - - - - - - - - - - - - -
int start()
  {
//------------------------------------------------------
if (GBP) //если есть разрешение true{
 
double C = iRSI("GBPUSD", 0, .....);
double D = iRSI("GBPUSD", 0, .....); 
 if (A<B)
{
double   BID = MarketInfo("GBPUSD", MODE_BID);
 double   ASK = MarketInfo("GBPUSD", MODE_ASK);
 double POINT =MarketInfo("GBPUSD",MODE_POINT);
(ticket=OrderSend .... //ПОКУПАЕМ/ПРОДАЕМ...)     }}}
//----------------------------------------------------------  
if (EUR) { //если есть разрешение true
 
double C = iRSI("EURUSD", 0, .....);
double D = iRSI("EURUSD", 0, .....);
 if (C>D)
{
double   BID = MarketInfo("EURUSD", MODE____BID);
 double   ASK = MarketInfo("EURUSD", MODE____ASK);
 double POINT =MarketInfo("EURUSD",MODE____POINT);
(ticket=OrderSend .... //ПОКУПАЕМ/ПРОДАЕМ...)      }}}
//------------------------------------------------------------
return(0);  
  }
A segunda opção também parece funcionar no testador.

Mas qual é a melhor maneira de fazer isso?

 
rid:

Boa noite!


Estou pensando em combinar dois pares em um único EA. Já o fiz.


Mas de repente eu tive dúvidas. Eu o fiz assim:

extern bool    GBP=true;
extern bool    EUR=true;
- - - - - - - - - - - - - - - - - - - -
int start()
  {
double A = iRSI("GBPUSD", 0, .....);
double B = iRSI("GBPUSD", 0, .....);
 
double C = iRSI("EURUSD", 0, .....);
double D = iRSI("EURUSD", 0, .....);
//------------------------------------------------------
if (GBP) {//если есть разрешение true
if (A<B)
{
double   BID = MarketInfo("GBPUSD", MODE_BID);
 double   ASK = MarketInfo("GBPUSD", MODE_ASK);
 double POINT =MarketInfo("GBPUSD",MODE_POINT);
(ticket=OrderSend .... //ПОКУПАЕМ/ПРОДАЕМ...)     }}}
//----------------------------------------------------------  
if (EUR) { //если есть разрешение true
if (C>D)
{
double   BID = MarketInfo("EURUSD", MODE____BID);
 double   ASK = MarketInfo("EURUSD", MODE____ASK);
 double POINT =MarketInfo("EURUSD",MODE____POINT);
(ticket=OrderSend .... //ПОКУПАЕМ/ПРОДАЕМ...)      }}}
//------------------------------------------------------------
return(0);  
  }

Em linha e no Testador de Estratégia tudo funciona! Talvez esta não seja exatamente a maneira correta de fazê-lo:

extern bool    GBP=true;
extern bool    EUR=true;
- - - - - - - - - - - - - - - - - - - -
int start()
  {
//------------------------------------------------------
if (GBP) //если есть разрешение true{
 
double C = iRSI("GBPUSD", 0, .....);
double D = iRSI("GBPUSD", 0, .....); 
 if (A<B)
{
double   BID = MarketInfo("GBPUSD", MODE_BID);
 double   ASK = MarketInfo("GBPUSD", MODE_ASK);
 double POINT =MarketInfo("GBPUSD",MODE_POINT);
(ticket=OrderSend .... //ПОКУПАЕМ/ПРОДАЕМ...)     }}}
//----------------------------------------------------------  
if (EUR) { //если есть разрешение true
 
double C = iRSI("EURUSD", 0, .....);
double D = iRSI("EURUSD", 0, .....);
 if (C>D)
{
double   BID = MarketInfo("EURUSD", MODE____BID);
 double   ASK = MarketInfo("EURUSD", MODE____ASK);
 double POINT =MarketInfo("EURUSD",MODE____POINT);
(ticket=OrderSend .... //ПОКУПАЕМ/ПРОДАЕМ...)      }}}
//------------------------------------------------------------
return(0);  
  }
A segunda opção também parece funcionar no testador.

Mas qual é a melhor maneira de fazer isso?




Costumo calcular todos os valores indicadores no início, ou seja, a variante 1, é mais fácil, não se confunde e o código é mais estruturado.
 

Obrigado! Para a resposta. Uma pergunta a mais. As paradas de trilha não querem funcionar. Eles trabalham individualmente no testador!

Mas online, funciona para um par. Mas para outro gera erro - logo após anexar o Expert Advisor.

Mas os negócios vão - somente sem rede de arrasto no segundo par.

Erro 130 modificando SL

int start()
  {
РАСЧЁТ  ИНДИКАТОРОВ 
{
ПОКУПКА/ПРОДАЖА
  }
 
for (int j=0; j<OrdersTotal(); j++)                                    {
    if (OrderSelect(j, SELECT_BY_POS, MODE_TRADES))                     {
     if (OrderSymbol()=="GBPUSD" && OrderMagicNumber()==Magic1)          {
ИДЕТ КОД 1 ТРЕЙЛИНГА.
   }
 
for (int r=0; r<OrdersTotal(); r++)                                    {
    if (OrderSelect(r, SELECT_BY_POS, MODE_TRADES))                     {
     if (OrderSymbol()=="EURUSD" && OrderMagicNumber()==Magic2)          {
ИДЕТ КОД 2 ТРЕЙЛИНГА
}
 
return(0);  
  }
Os códigos de rastreamento são os mesmos, mas as variáveis externas e internas têm caracteres diferentes.

Eu não consigo entender o que está errado. Talvez alguém me diga?

 
tente assim
int start()
{
//РАСЧЁТ  ИНДИКАТОРОВ 
 
//ПОКУПКА/ПРОДАЖА
  
 
for (int j=0; j<OrdersTotal(); j++)
  {
    if (OrderSelect(j, SELECT_BY_POS, MODE_TRADES))
       {
          if (OrderSymbol()=="GBPUSD" && OrderMagicNumber()==Magic1)         
              {
                  ИДЕТ КОД 1 ТРЕЙЛИНГА.
              }
          if (OrderSymbol()=="EURUSD" && OrderMagicNumber()==Magic2)   
              {
                  ИДЕТ КОД 2 ТРЕЙЛИНГА
              }
        }
   }
 
 
  return(0);  
}
 
estruturar o código, será mais fácil para ambas as pessoas e para você entender.
 

Vou tentar, obrigado.

 

Parece estar funcionando!

Nenhum erro ainda. Esperando lucros para verificar a rede de arrasto.

Mais perguntas. Se você não se importa.

Em nenhum dos exemplos mais simples de experimentos com várias moedas. E onde eles estão disponíveis, não são para a mente fraca. É muito complicado para entender tudo.

Há um em meu código:

 double   BID = MarketInfo("GBPUSD", MODE_BID);
 double   ASK = MarketInfo("GBPUSD", MODE_ASK);
 double POINT =MarketInfo("GBPUSD",MODE_POINT);
//-------Проверяем условие на покупку-------------
if  (

No entanto, nos raros exemplos neste site quando um bloco semelhante está presente, há uma linha:

RefreshRates();
 double BID = MarketInfo("GBPUSD", MODE_BID);
 double ASK = MarketInfo("GBPUSD", MODE_ASK);
 double POINT =MarketInfo("GBPUSD",MODE_POINT);

Eu também inseri esta linha. Ele compilou. Mas eu não noto nenhuma mudança no desempenho.

Quanto é necessário aqui? Talvez devesse ser deixado em minha EA. Funciona em todos os carrapatos. E utiliza um conjunto de valores -

//------заполняем массив значениями RSI GBPUSD -----------
 double RSI_array[30];
int    i=0;
while (i<31)
 {
RSI_array[i]=iRSI("GBPUSD",0,GBPUSD_period,3,3,MODE_SMA,0,MODE_MAIN,i);
i++;

 
o princípio do Expert Advisor com várias moedas é aproximadamente o seguinte:
1. no cálculo de indicadores para especificar moedas específicas e intervalos de tempo, por exemplo: iRSI("GBPUSD",60,GBPUSD_period,3,3,MODE_SMA,0,MODE_MAIN,i); //mas aqui é um erro
2. obter preços, pontos, etc. usando MarketInfo.
3. usar iLow(...) em vez de Low[0], por exemplo
e se aplicam a todos os pares de moedas.
Boa sorte.
 

Erro! Em vez de "0" - eu coloco variáveis indicadoras para moedas - o cronograma no qual o Expert Advisor trabalha.

Meu consultor especializado parece funcionar sem problemas. E as redes de arrasto também funcionam.

E uma última pergunta, espero eu. Eu inseri mais um. Mas não é o indicador embutido, mas um indicador personalizado. No testador, este par funciona. Mas online, não vai! Mostra algo estranho: quase a cada segundo este indicador é colocado e apagado. ..... - algum conselho?

//***************************************************************

kLerk ! De todos os especialistas aqui esta semana, você é o único que respondeu à minha pergunta. E eu tive as respostas com as quais fiquei mais satisfeito. ( Exceto para perguntas sobre RefreshRates() )

Por favor, coloque seu endereço de e-mail aqui.

Como prova de minha gratidão, eu lhe enviarei um simples "Graal" comercial - EA! que foi inventado por meu bom amigo.(Concordo) Eu trabalho com ele com confirmação manual. Trabalho com ele como confirmação manual. Utilizo apenas dois Indicadores Induzidos incorporados.

Sem ironia, - que realmente é quase um "Graal" (em alguma habilidade de trabalhar com ele), - você verá depois de alguns minutos depois de recebê-lo! No entanto - que todos dêem uma olhada:

O símbolo ---------

Período 30 Minutos (M30) 2007.01.02 11:00 - 2007.08.15 00:00

Modelo Todos os carrapatos (baseado em todos os menores períodos disponíveis com interpolação fractal de cada carrapato)

Qualidade de modelagem 67,35%

Depósito inicial 10000,00

Lucro líquido 4009,24

Lucro total 6335.06 Perda total -2325.82

Rentabilidade 2,72 Pagamento previsto 21,44

Desembolso máximo 245,63 (2,18%) Desembolso relativo 2,18% (245. 63)

Total de comércios 187

Posições curtas (% ganho) 71 (80,28%)

Posições longas (% ganho) 116 (68,10%)

Ofícios rentáveis (% do total) 136 (72,73%)

Perdas comerciais (% do total) 51 (27,27%)

Maior comércio lucrativo 145,02, perdendo comércio -47. 77

Comércio lucrativo médio 46,58, perdendo comércio -45,60

Número máximo de ganhos contínuos (lucro) 9 (586. 96)

perdas (perdas) contínuas 4 (-189,99

E aqui está o gráfico de teste fora da amostra para novembro/dezembro do ano anterior de 2006:

 
rid:

Como prova de minha gratidão, eu lhe enviarei um simples "graal" comercial - um conselheiro!

Parabéns, klerk, você conseguiu o graal de graça!
 
<< Imprime algo incompreensível: quase a cada segundo este indicador é colocado e removido...... - >>

Muito provavelmente, os parâmetros reais com os quais o indicador personalizado é chamado não correspondem aos parâmetros formais listados com a chave externa na listagem (número, ordem, tipo, ...). Um erro bastante comum.
Razão: