[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 680

 
boris.45:
Como posso entrar em contato com você? Eu tenho muitas perguntas e gostaria de receber alguns conselhos.
Quando você fizer uma pergunta a alguém, clique em "responder" no canto inferior direito do correio da pessoa a quem você está se dirigindo. Caso contrário, as pessoas se perguntarão a quem sua pergunta é dirigida... :)
 
Você pode me dizer se é possível enviar um comando de desconexão para a EA a partir do roteiro?
 
granit77:
Eu substituiria um interruptor por uma matriz pronta, por que atribuir valores pré-definidos toda vez?

Obrigado, mas você poderia ser mais específico? Porque os valores pré-definidos aqui são prazos, mas o código que segue os casos para diferentes indicadores será diferente... Provavelmente, é mais fácil de se estabelecer um pouco mais de código. :) Em geral estou muito lento hoje - não consegui dormir ontem à noite e ainda estou no limbo...

int AnaliseFunc (string sy, int tf)
{
   
   CurAsk   =MarketInfo(Symbol(),MODE_ASK);
   CurBid   =MarketInfo(Symbol(),MODE_BID);
   OpnPrice =iOpen(NULL,PERIOD_M5,0);
   OpnPrice1=iOpen(NULL,PERIOD_M5,1);
   ClsPrice1=iClose(NULL,PERIOD_M5,1);
         
   if (sy=="" || sy=="0") sy=Symbol();
double
   BB_1  =iCustom(sy,tf,"BB_MA",13,1,1,1),
   BB_2  =iCustom(sy,tf,"BB_MA",13,1,1,2),
   BB_3  =iCustom(sy,tf,"BB_MA",13,1,1,3),
   AO1   =iAO(sy,tf,1),
   AO2   =iAO(sy,tf,2),
   AO3   =iAO(sy,tf,3),
   AC1   =NormalizeDouble(iAC(sy,tf,1),8)*1000,
   AC2   =NormalizeDouble(iAC(sy,tf,2),8)*1000,
   AC3   =NormalizeDouble(iAC(sy,tf,3),8)*1000,
   AC4   =NormalizeDouble(iAC(sy,tf,4),8)*1000,
   AC5   =NormalizeDouble(iAC(sy,tf,5),8)*1000,
   SpMan1=iCustom(sy,tf,"SpearmanRankCorr",14,1000,30,true,0,1),
   SpMan2=iCustom(sy,tf,"SpearmanRankCorr",14,1000,30,true,0,2),
   DeM_1 =iDeMarker(sy,tf,14,1),
   DeM_2 =iDeMarker(sy,tf,14,2),
   Mom_1 =iMomentum(sy,tf,14,PRICE_CLOSE,1),
   Mom_2 =iMomentum(sy,tf,14,PRICE_CLOSE,2),
   Mom_3 =iMomentum(sy,tf,14,PRICE_CLOSE,3);
   
//---------------- Проверка на разворот BB_MA -------------------------------------------------------   
   
   if (BB_1>BB_2 && BB_2<=BB_3 && BB_1<0)                               // Найден разворот BB вверх
      {
      switch (tf)
         {
            case 1:     TrBBTurnUP_M1 =true;  TrBBTurnDN_M1=false;      // Флаг разворота вверх на М1
            case 5:     TrBBTurnUP_M5 =true;  TrBBTurnDN_M5=false;      // Флаг разворота вверх на М5
            case 15:    TrBBTurnUP_M15=true;  TrBBTurnDN_M15=false;     // Флаг разворота вверх на М15 
            case 30:    TrBBTurnUP_M30=true;  TrBBTurnDN_M30=false;     // Флаг разворота вверх на М30 
            case 60:    TrBBTurnUP_H1 =true;  TrBBTurnDN_H1=false;      // Флаг разворота вверх на H1
            case 240:   TrBBTurnUP_H4 =true;  TrBBTurnDN_H4=false;      // Флаг разворота вверх на H4
            case 1440:  TrBBTurnUP_D1 =true;  TrBBTurnDN_D1=false;      // Флаг разворота вверх на D1
            case 10080: TrBBTurnUP_W1 =true;  TrBBTurnDN_W1=false;      // Флаг разворота вверх на W1
            case 43200: TrBBTurnUP_MN =true;  TrBBTurnDN_MN=false;      // Флаг разворота вверх на MN
         }
      }
   if (BB_1<BB_2 && BB_2>=BB_3 && BB_1>0)                               // Найден разворот BB вниз
      {
      switch (tf)
         {
            case 1:     TrBBTurnUP_M1 =false;  TrBBTurnDN_M1=true;      // Флаг разворота вниз на М1
            case 5:     TrBBTurnUP_M5 =false;  TrBBTurnDN_M5=true;      // Флаг разворота вниз на М5
            case 15:    TrBBTurnUP_M15=false;  TrBBTurnDN_M15=true;     // Флаг разворота вниз на М15 
            case 30:    TrBBTurnUP_M30=false;  TrBBTurnDN_M30=true;     // Флаг разворота вниз на М30 
            case 60:    TrBBTurnUP_H1 =false;  TrBBTurnDN_H1=true;      // Флаг разворота вниз на H1
            case 240:   TrBBTurnUP_H4 =false;  TrBBTurnDN_H4=true;      // Флаг разворота вниз на H4
            case 1440:  TrBBTurnUP_D1 =false;  TrBBTurnDN_D1=true;      // Флаг разворота вниз на D1
            case 10080: TrBBTurnUP_W1 =false;  TrBBTurnDN_W1=true;      // Флаг разворота вниз на W1
            case 43200: TrBBTurnUP_MN =false;  TrBBTurnDN_MN=true;      // Флаг разворота вниз на MN
         }
      }
//---------------------- Проверка на разворот Momentum -----------------------------------------------
   
   if (Mom_1>Mom_2 && Mom_2<=Mom_3 && Mom_1<100.0)
      {
      switch (tf)
         {
            case 1:     TrMomTurnUP_M1 =true;  TrMomTurnDN_M1=false;      // Флаг разворота вверх на М1
            case 5:     TrMomTurnUP_M5 =true;  TrMomTurnDN_M5=false;      // Флаг разворота вверх на М5
            case 15:    TrMomTurnUP_M15=true;  TrMomTurnDN_M15=false;     // Флаг разворота вверх на М15 
            case 30:    TrMomTurnUP_M30=true;  TrMomTurnDN_M30=false;     // Флаг разворота вверх на М30 
            case 60:    TrMomTurnUP_H1 =true;  TrMomTurnDN_H1=false;      // Флаг разворота вверх на H1
            case 240:   TrMomTurnUP_H4 =true;  TrMomTurnDN_H4=false;      // Флаг разворота вверх на H4
            case 1440:  TrMomTurnUP_D1 =true;  TrMomTurnDN_D1=false;      // Флаг разворота вверх на D1
            case 10080: TrMomTurnUP_W1 =true;  TrMomTurnDN_W1=false;      // Флаг разворота вверх на W1
            case 43200: TrMomTurnUP_MN =true;  TrMomTurnDN_MN=false;      // Флаг разворота вверх на MN
         }
      }
      
   if (Mom_1<Mom_2 && Mom_2>=Mom_3 && Mom_1>100.0)
      {
      switch (tf)
         {
            case 1:     TrMomTurnUP_M1 =false;  TrMomTurnDN_M1=true;      // Флаг разворота вверх на М1
            case 5:     TrMomTurnUP_M5 =false;  TrMomTurnDN_M5=true;      // Флаг разворота вверх на М5
            case 15:    TrMomTurnUP_M15=false;  TrMomTurnDN_M15=true;     // Флаг разворота вверх на М15 
            case 30:    TrMomTurnUP_M30=false;  TrMomTurnDN_M30=true;     // Флаг разворота вверх на М30 
            case 60:    TrMomTurnUP_H1 =false;  TrMomTurnDN_H1=true;      // Флаг разворота вверх на H1
            case 240:   TrMomTurnUP_H4 =false;  TrMomTurnDN_H4=true;      // Флаг разворота вверх на H4
            case 1440:  TrMomTurnUP_D1 =false;  TrMomTurnDN_D1=true;      // Флаг разворота вверх на D1
            case 10080: TrMomTurnUP_W1 =false;  TrMomTurnDN_W1=true;      // Флаг разворота вверх на W1
            case 43200: TrMomTurnUP_MN =false;  TrMomTurnDN_MN=true;      // Флаг разворота вверх на MN
         }
      }
//---------------------- Проверка DeMarker на перепроданность/перекупленность ---------
Veja - há um código absolutamente idêntico acontecendo, mas já está verificando os critérios comerciais de outros acusadores... Eu só quero enfiar todas as verificações de todos os índices usados no EA em um bloco analítico, para que ele calcule seus valores uma vez por um tick, colocá-los em variáveis e usar os valores das variáveis para decisões comerciais. Não sei como organizá-lo usando um conjunto de valores pré-definidos.
 
artmedia70:

Obrigado, mas você poderia ser mais específico? Porque os valores pré-definidos aqui são prazos, mas o código que segue os casos para diferentes indicadores será diferente... Provavelmente, é mais fácil de se estabelecer um pouco mais de código. :) Hoje não estou pensando direito - não consegui dormir ontem à noite e ainda estou no limbo...

Veja - há ali um código absolutamente idêntico, mas já verifica os critérios comerciais de outros indiretos... Eu só quero enfiar todas as verificações de todos os índices usados no EA em um bloco analítico e então ele calculará seus valores uma vez por um tick, colocá-los em variáveis e usar os valores das variáveis para as decisões comerciais. Não sei como organizá-lo usando um conjunto de valores pré-definidos.




Talvez você só precise selecionar uma prioridade de cálculo, ou seja, parece que você tem

Se (BB_1<0 ) é a primeira condição obrigatória após a qual não há necessidade de calcular outros BB_, bem, faça um BB_ composto se e faça os cálculos necessários em segundo se, dado que primeiro se cumpriu, e se ... caso contrário, é bastante eficaz, enquanto você só tem se

Concordo, o código pode se tornar maior e menos legível, mas o desempenho irá aumentar

 
IgorM:


talvez você só precise pegar a prioridade do cálculo, ou seja, como se você tivesse

Se (BB_1<0 ) for a primeira condição obrigatória, após a qual não há necessidade de calcular outros BB_, então faça um composto se e faça os cálculos BB_ necessários no segundo se, desde que o primeiro se tenha sido cumprido, e se . caso contrário, é bastante eficaz, enquanto você só tem se

Concordo que seu código pode se tornar maior e menos legível, mas o desempenho irá aumentar.

Obrigado, Igor, vou ver o que acontece. Não era isso que eu tinha em mente... Lembro-me dos primeiros tempos da informatização, em 1991-94, não me lembro exatamente... Eu estava fazendo programação em linguagem de montagem para a ZX Spectrum. que era terrivelmente lento e limitado a 64Kb de memória. Assim, houve um comando para o processador trabalhar com a área de memória da tela para produzir rapidamente 16386Kb para essa área. O comando documentado da CPU foi o mais rápido de todos, trabalhando com um grande conjunto de dados. Não há muito que possamos fazer sobre isso, mas... eles encontraram uma maneira de quadruplicar a velocidade de saída. Havia comandos para trabalhar com a pilha e eles foram executados muito mais rapidamente. Foi assim que fizeram: moveram a pilha para uma área de memória não utilizada que vai logo após a tela, preencheram essa área com dados gráficos e depois, tendo movido a pilha para a tela, rapidamente saltaram a tela preparada em memória para a área da tela com um comando que preencheu a pilha... Apenas um milagre para aqueles tempos, mas para o Spectrum era mágico...

Também aqui estou interessado em formas não convencionais de trabalho... Como ver que comandos são executados em quantos ciclos de relógio e construir algo semelhante... O que poderia substituir os comandos lógicos de comparação, talvez subtração ou algo mais na mesma veia....

 
artmedia70:

E aqui estou interessado em formas de trabalho não-padronizadas. Como procurar quais comandos são executados em quantos ciclos de relógio e construir algo semelhante... O que poderia substituir os comandos lógicos de comparação, talvez subtração ou algo parecido....


acho que você não vai encontrar em mql - os princípios de mql são muito parecidos com java com sintaxe C, tente ver qual é mais rápido para executar caso ou se, lembro quando vi em turbopascal que se é mais rápido
 
artmedia70:
Bem-vindo aqui.
 
Oper:
Você sabe se pode enviar um comando para desativar a EA a partir do script?

Você pode. Eu, por exemplo, controlo minha EA com scripts que definem variáveis globais para um determinado estado. Os estados destas variáveis

eles são analisados no Expert Advisor e os comandos necessários são executados.

 
Boa tarde.
 
   SetIndexStyle(2,DRAW_ARROW);
   SetIndexArrow(2,241); 
Você pode me dizer como ajustar corretamente o tamanho da seta, e por que ela aumenta de tamanho quando você redefine as configurações de cor, mas diminui quando você recompila?