Pergunta do assessor multimoedas - página 4

 

OK, VassaV, entendi!

Aqui está outra pergunta. No código usual, quando uma posição é aberta, ela é mostrada:

//---------проверяем условие на покупку----------------------------
  if   ( бла-бла-бла  )
   {
  Lots=GetSizeLot(); 
  ticket=OrderSend("GBPUSD",0,Lots,Ask,Slippage,Bid-SL_long*Point,Ask+TP_long*Point,
                                                         "мульти",MagicNum,0,CLR_NONE);
  if    (ticket<0) { Print("Ошибка открытия ордера BUY #", GetLastError()); return (0); }  
 ... ... ...

Aqui temos o valor do "bilhete". No meu EA, o esquema é um pouco diferente, como este:

if (GBP) {     //если  "выключатель" включен
if (!ExpertOrder(MagicGBP)) { //если ордеров по паре GBPUSD нет
 
//-------Проверяем условие на покупку-------------
if  (    бла-бла-бла     )
    {  
  //---- Цикл открытия ордера  -------------------------------------------                      
int Cnt=1;
  while (Cnt <= 5) 
  { //-----покупаем--------------
    Lots=GetSizeLot();
   if (OrderSend("GBPUSD",OP_BUY,Lots,ask_GBP,3,bid_GBP - sl_GBPUSD_long*point_GBP,
           ask_GBP+tp_GBPUSD_long*point_GBP,"M_1", MagicGBP, 0, Blue) > 0)  break;    
    else 
{ Print ("Ошибка открытия Buy #", ErrorDescription( GetLastError() ),
                                                  " попытка ", Cnt);
                               
        if (Cnt==5) return(0);  //если за 5 попыток не закрыли - выходим
        Cnt++;
        Sleep(15000); // ждём 15 секунд
      }   
    }
  }

Mas eu também preciso do valor do "bilhete"! Para este par. Não posso fazer isso a manhã toda! Quem sabe, - Por favor, diga-me como?

 

A todos aqueles que queriam conselhos mas não tiveram tempo de responder, obrigado!

Acho que eu mesmo já resolvi isso (esta tarde). É assim:

 //---- Цикл открытия ордера  -------------------------------------------                      
int Cnt=1;
  while (Cnt <= 5) 
  { //-----покупаем--------------
    Lots=GetSizeLot();
   ticketGBP = OrderSend("GBPUSD",OP_BUY,Lots,ask_GBP,3,bid_GBP - sl_GBPUSD_long*point_GBP,
           ask_GBP+tp_GBPUSD_long*point_GBP,"M_1", MagicGBP, 0, Blue);
         if (ticketGBP > 0)  break;    
    else 
{ Print ("Ошибка открытия Buy #", ErrorDescription( GetLastError() ),
                                                  " попытка ", Cnt);
                               
        if (Cnt==5) return(0);  //если за 5 попыток не закрыли - выходим
        Cnt++;
        Sleep(15000); // ждём 15 секунд
      }
 

A condição de testar o Expert Advisor por 5 minutos no Campeonato, e apenas 3 semanas antes do final do período, foi quase um INÍCIO para todos!

Individualmente, meu consultor especializado é testado no histórico de 12 meses em um par, - não mais do que 3-4 minutos. Funciona em todos os carrapatos.

Mas quando eu uni vários EAs em um - EA com várias moedas, o tempo de teste aumenta até 7-10 minutos!

E eu desabilito todos os pares, exceto um que eu corro.

Quero pedir aos profissionais (e não apenas) que compartilhem suas experiências e formas de diminuir o tempo de teste.

Aestrutura do Expert Advisor é a seguinte:

 
//---- input parameters---------
 
ЗАДАЕМ ВНЕШНИЕ ПАРАМЕТРЫ ПО КАЖДОЙ ПАРЕ
 
int init()
  {
   return(0);
  }
int deinit()
  {
   return(0);
  }
 
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  { 
 
//*********************************************************************
 
double ЗАДАЕМ ПЕРЕМЕННЫЕ ПО ПЕРВОЙ ПАРЕ 
double ЗАДАЕМ ПЕРЕМЕННЫЕ ПО ВТОРОЙ ПАРЕ
... ... ... ...
double ЗАДАЕМ ПЕРЕМЕННЫЕ ПО ПОСЛЕДНЕЙ ПАРЕ
 
 =========================================================
 
int Orders=OrdersTotal ();     //получаем кол-во открытых ордеров
if (Orders<3)                 //если  открытых ордеров <3
  { 
if (выключатель 1 вкл) {ОТКРЫВАЕМ ПЕРВУЮ ПАРУ } 
if (выключатель 2 вкл) {ОТКРЫВАЕМ ВТОРУЮ ПАРУ } 
... ... ... 
if (выключатель N вкл) {ОТКРЫВАЕМ ПОСЛЕДНЮЮ ПАРУ }  
  }
//========================================================================
for (int x=0; x<OrdersTotal(); x++)                                             {
    if (OrderSelect(x, SELECT_BY_POS, MODE_TRADES)) 
{       
if (UseTrailing 1) - ТРЕЙЛИНГ ПЕРВОЙ ПАРЫ
... ... ...
if (UseTrailing N) - Трейлинг последней пары
}
//======================================================================
   return(0);
  }
 
rid:

A condição de testar o Expert Advisor por 5 minutos no Campeonato em apenas 3 semanas antes do final do período tem sido quase um INÍCIO para todos!

Individualmente, meu Expert Advisor é testado no histórico de 12 meses em um par - não mais do que 3-4 minutos. Funciona em todos os carrapatos.

Mas quando eu uni vários EAs em um - EA com várias moedas, o tempo de teste aumenta até 7-10 minutos!

E eu desabilito todos os pares, exceto um - que estou testando.

Quero pedir aos especialistas (e não apenas) que compartilhem suas abordagens e formas de diminuir o tempo de teste.

A estrutura do Expert Advisor é assim:

 
//---- input parameters---------
 
ЗАДАЕМ ВНЕШНИЕ ПАРАМЕТРЫ ПО КАЖДОЙ ПАРЕ
 
int init()
  {
   return(0);
  }
int deinit()
  {
   return(0);
  }
 
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  { 
 
//*********************************************************************
 
double ЗАДАЕМ ПЕРЕМЕННЫЕ ПО ПЕРВОЙ ПАРЕ 
double ЗАДАЕМ ПЕРЕМЕННЫЕ ПО ВТОРОЙ ПАРЕ
... ... ... ...
double ЗАДАЕМ ПЕРЕМЕННЫЕ ПО ПОСЛЕДНЕЙ ПАРЕ
 
 =========================================================
 
int Orders=OrdersTotal ();     //получаем кол-во открытых ордеров
if (Orders<3)                 //если  открытых ордеров <3
  { 
if (выключатель 1 вкл) {ОТКРЫВАЕМ ПЕРВУЮ ПАРУ } 
if (выключатель 2 вкл) {ОТКРЫВАЕМ ВТОРУЮ ПАРУ } 
... ... ... 
if (выключатель N вкл) {ОТКРЫВАЕМ ПОСЛЕДНЮЮ ПАРУ }  
  }
//========================================================================
for (int x=0; x<OrdersTotal(); x++)                                             {
    if (OrderSelect(x, SELECT_BY_POS, MODE_TRADES)) 
{       
if (UseTrailing 1) - ТРЕЙЛИНГ ПЕРВОЙ ПАРЫ
... ... ...
if (UseTrailing N) - Трейлинг последней пары
}
//======================================================================
   return(0);
  }

é testado lentamente, principalmente devido aos indicadores

eles não são visíveis nesta estrutura, mas é muito provável que você os tenha, caso contrário eles levariam no máximo um minuto para serem testados.

Os indicadores têm que ser alterados ou movidos para o código no EA.

 

Loky,

Eu o entendi corretamente?

Meus indicadores são onde eu defino as variáveis. E aparentemente eles

double ЗАДАЕМ ПЕРЕМЕННЫЕ (индикаторов) ПО ПЕРВОЙ ПАРЕ

deve provavelmente ser movido para dentro de

if (выключатель 1 вкл) {ОТКРЫВАЕМ ПЕРВУЮ ПАРУ }

para cada par de acordo?

 
Dê uma olhada no Protótipo-IX como um exemplo. Um exemplo de um Expert Advisor com várias moedas.

Ele permite que você teste em qualquer um dos 12 pares de moedas e em vários prazos.
15:18:05 Entradas ProtoType-IX: EMN=10000; Slippage=3; RiskDelta=5; PeriodWPR=8; CriteriaWPR=25; ATRPeriod=40; kATR=0.5; ZeroBar=8; MinTargetinSpread=5; TP_SL_Criteria=2; MaxOpenedOrders=3; MaxOrderSize=5; <br / translate="no"> 15:18:05 2006.10.17 09:38 ProtoType-IX EURUSD,M15: indexPeriod=2 PeriodTesting=15 SymbolTesting=3 SymbolTesting=EURUSD
15:18:05 2006.10.17 09:38 NRTR_GATOR EURUSD,M15: carregado com sucesso
15:18:09 2006.10.17 09:38 NRTR_GATOR EURUSD,M30: carregado com sucesso
15:18:09 2006.10.17 09:38 NRTR_GATOR EURUSD,H1: carregado com sucesso
15:18:09 2006.10.17 09:38 NRTR_GATOR EURUSD,H4: carregado com sucesso
15:18:09 2006.10.17 09:38 NRTR_GATOR EURUSD,Daily: carregado com sucesso
15:18:09 2007.01.02 00 00:00 NRTR_GATOR EURUSD,M30: Atenção, a tendência não está definida. Barra a partir do final de 4
15:18:09 2007.01.02 00 00 00:00 NRTR_GATOR EURUSD,M30: Atenção! A tendência não está definida, não pode ser
15:18:09 2007.01.02 00 00:00 NRTR_GATOR EURUSD,H1: Atenção! A tendência não está definida, não pode estar. Barra a partir do final de 1
15:18:09 2007.01.02 00 00:00 NRTR_GATOR EURUSD,H1: Atenção! A tendência não está definida, não pode ser
......................................

15:18:23 2007.08.17 22:17 Testador: pare a perda #242 em 1.3483 (1.3483 / 1.3485)
15:18:23 2007.08.17 22:59 NRTR_GATOR EURUSD,Daily: removido
15:18:23 2007.08.17 22:59 NRTR_GATOR EURUSD,H4: removido
15:18:23 2007.08.17 22:59 NRTR_GATOR EURUSD,H1: removido
15:18:23 2007.08.17 22:59 NRTR_GATOR EURUSD,M30: removido
15:18:23 2007.08.17 22:59 ProtoType-IX EURUSD,M15: Testes concluídos


Foram necessários 18 segundos para testar em 15 minutos no modelo "Every ticks".
 

Obrigado a todos que responderam à pergunta. As coisas estão se clarificando gradualmente. Enfiou os perus dentro. E agora o limite é atingido.

Rosh, - já tentou uma dúzia de vezes se aproximar do especialista nomeado por você. Mas... toda vez que eu recuei... Com meus modestos conhecimentos, ainda não consigo entender o código e sua estrutura. Estou confuso e não está muito claro por onde começar e como estruturar sua pesquisa. Há muitas incertezas e não consigo chegar a tudo de uma só vez. Começo a entender tudo e logo paro para pensar - por onde comecei e para quê ...

E aproveitando esta oportunidade, tenho uma pergunta sobre o artigo "Exemplo de criação de um Expert Advisor" ^

 
klerk:
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.
O único inconveniente é que todos os símbolos comercializados devem ter gráficos abertos com seus cronogramas.

Se os gráficos não forem abertos, ou se forem abertos com prazos diferentes dos usados, você tem que executar constantemente

Verifica cada espirro - mesmo o iRSI pode não funcionar ... até que o terminal seja reiniciado ...

Respeitosamente - S.D.
 

Em linha, defino no Expert Advisor (nos índices) tempo=1 min (para verificar o desempenho) em todos os pares.

E coloquei-o no gráfico do primeiro par no tempo=1 minuto. Mas em outros pares da EA, o cronograma é muitas vezes diferente. E no entanto, a EA opera em todos os pares exatamente em termos de minutos de tempo, como está implementado no código!

Ou talvez eu não o tenha entendido corretamente?

 
klerk:
O princípio do Expert Advisor com múltiplas moedas é o seguinte:
1. especificar moedas específicas e intervalos de tempo no cálculo de indicadores, 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. use iLow(...) em vez de Low[0] por exemplo
e
escreva-o em todos os pares de moedas.
Boa sorte.


Poderia me dizer se a substituição da construção será correta?

H=High[iHighest("USDJPY", PERIOD_H4, MODE_HIGH, 50, 1)];

em código Expert Advisor de várias moedas quando se trabalha no instrumento de outra pessoa em tal instrumento:

double H_current, H_previous;
H_current=0; H_previous=0;
 
for (int n=1; n<51; n++)
  {
    H_previous=H_current;
    H_current=iHigh("USDJPY", PERIOD_H4, n);
    H=MathMax(H_previous, H_current);
  }

Se não, favor informar qual é o erro e como fazê-lo corretamente?

Agradecemos antecipadamente.