Perguntas de um "boneco" - página 6

 
pusheax:

Alguns CD em contas reais atribuem todo o tipo de prefixos como "." ou "FXF" aos nomes dos símbolos.

Como posso utilizar estes prefixos?

Eu fi-lo:

#define DEF_SPEC "FXF

string SymbolsTrade[] = {"AUDCAD "DEF_SPEC ... -não funciona

string SymbolsTrade[] = {"AUDCAD "+DEF_SPEC ... - também não funciona assim

tudo o que recebo é FXF em vez do necessário AUDCADFXF.

Poderia dizer-me como implementar isto?


Primeiro, o preenchimento de uma matriz com enumeração só é possível no âmbito global, pelo que nenhum + funcionará aí, apenas constantes de cordas.

Em segundo lugar, tem uma matriz estática que não é distribuída, enquanto uma matriz dinâmica não pode ser preenchida com uma enumeração.

A forma mais fácil é escrever uma função que distribui e preenche uma matriz dinâmica, pode fazer tudo, adicionar definições a constantes, etc.

 
Urain:

Primeiro, o preenchimento de uma matriz com uma enumeração só é possível no âmbito global, pelo que nenhum + funcionará aí, apenas constantes de cordas.

Em segundo lugar, não distribuiu matriz estática, e a matriz dinâmica não pode ser preenchida por enumeração.

A forma mais fácil é escrever uma função que distribui e preenche a matriz dinâmica, pode fazer tudo, adicionar definições com constantes, etc.

Pode também tentar pesquisar todos os pares de moedas existentes em BC/BROKER e analisar as moedas compostas neles existentes.

Depois disso, pode criar um conjunto dinâmico de pares de moedas tendo em conta a adição de quaisquer prefixos.

Tanto quanto me lembro, é uma das opções universais para o MT5.

 
Urain:

Primeiro, o preenchimento de uma matriz com uma enumeração só é possível no âmbito global, pelo que nenhum + funcionará aí, apenas constantes de cordas.

Em segundo lugar, não distribuiu matriz estática, e a matriz dinâmica não pode ser preenchida por enumeração.

A forma mais fácil é escrever uma função que irá distribuir e preencher a matriz dinâmica, pode fazer tudo, adicionar definições às constantes, etc.

Em suma, se o entendi correctamente, não se pode criar um conjunto de constantes de cordas estáticas no âmbito global, certo?

 
uncleVic:

É possível ver o código no código fonte. Dois métodos são utilizados para encontrar a divergência:

1. O método bool CSignalMACD::ExtState(int ind) prepara os dados para a pesquisa;

2. O método bool CSignalMACD::CompareMaps(int map,int count,bool minimax,int start) procura um modelo de mercado com os parâmetros especificados.

Se ajudar, aqui estão os comentários aos métodos em russo:

Para o método bool CSignalMACD::ExtState(int ind)

Para o método bool CSignalMACD::CompareMaps(int map,int count,bool minimax,int start)

Também tenho uma pergunta - como especificar a variante de divergência ao criar um Expert Advisor utilizando o sinal MACD? Existem várias variantes do sinal no livro de referência.
 
strelec:
Tenho também uma pergunta, como especificar a variante de divergência ao criar um Expert Advisor utilizando o sinal MACD? Há várias variantes de sinais no manual.

Como todos já notaram, qualquer sinal pode detectar múltiplos padrões de mercado. Para controlar a utilização de padrões , chamar o método PatternsUsage(int value), onde o valor é o mapa de bit da utilização de padrões (número de bit e número de padrão são os mesmos). Bit é 1 - modelo é utilizado, bit é 0 - modelo não é utilizado (por defeito todos os bits são 1). A numeração dos modelos, bem como dos bits, começa em 0.

Assim, se quiser usar apenas divergências, deve usar PatternsUsage(16);. Porquê 16? 16 é binário 10000b (ou seja, o bit 4 é 1, todos os outros bits são 0). E apenas o modelo 4 "divergência entre o oscilador e o preço".

O único "mas", terá de o fazer "manualmente".

Após a conclusão do Wizard, o código fonte será aberto no editor. Encontre um lugar como este no editor:

//--- Creating filter CSignalMACD
   CSignalMACD *filter0=new CSignalMACD;
   if(filter0==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating filter0");
      ExtExpert.Deinit();
      return(-3);
     }
   signal.AddFilter(filter0);
//--- Set filter parameters
   filter0.PeriodFast(Signal_MACD_PeriodFast);
   filter0.PeriodSlow(Signal_MACD_PeriodSlow);
   filter0.PeriodSignal(Signal_MACD_PeriodSignal);
   filter0.Applied(Signal_MACD_Applied);
   filter0.Weight(Signal_MACD_Weight);

e acrescentar uma linha

filter0.PatternsUsage(16);

vai tê-lo:

//--- Creating filter CSignalMACD
   CSignalMACD *filter0=new CSignalMACD;
   if(filter0==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating filter0");
      ExtExpert.Deinit();
      return(-3);
     }
   signal.AddFilter(filter0);
//--- Set filter parameters
   filter0.PatternsUsage(16);
   filter0.PeriodFast(Signal_MACD_PeriodFast);
   filter0.PeriodSlow(Signal_MACD_PeriodSlow);
   filter0.PeriodSignal(Signal_MACD_PeriodSignal);
   filter0.Applied(Signal_MACD_Applied);
   filter0.Weight(Signal_MACD_Weight);

É tudo por agora. Se tiver alguma dúvida, não hesite em contactar-me.

 
uncleVic:

Como todos já notaram, qualquer sinal pode detectar múltiplos padrões de mercado. Para controlar a utilização de padrões , chamar o método PatternsUsage(int value), onde o valor é um bitmap de utilização de padrões (o número do bit e o número do padrão são os mesmos). Bit é 1 - modelo é utilizado, bit é 0 - modelo não é utilizado (por defeito todos os bits são 1). A numeração dos modelos, bem como os bits começam a partir de 0.

Por isso, se só quiser usar divergência, precisa de usar o PatternsUsage(16);. Porquê 16? 16 é 10000b em binário (ou seja, o bit 4 é 1, os outros bits são 0). E apenas o modelo 4 "divergência entre o oscilador e o preço".

O único "mas", terá de o fazer "manualmente".

Após a conclusão do Wizard, o código fonte será aberto no editor. Encontre um lugar como este no editor:

e acrescentar uma linha

filter0.PatternsUsage(16);

consegue-o:

É tudo por agora. Se tiver alguma dúvida, não hesite em contactar-me.

Obrigado. Já está. E há mais perguntas a fazer de imediato. Nesta variante de divergência, que intervalo de tempo entre os picos vizinhos (troughs) é tido em conta?
 
strelec:
Obrigado. Funcionou. E há mais perguntas a fazer de imediato. Nesta variante de divergência, que intervalo de tempo entre os topos vizinhos (troughs) é tido em conta?
O intervalo não é analisado.
 

Tenho um perito com o qual tento lidar com os acontecimentos.

string event[10]=
{
"CHARTEVENT_KEYDOWN - событие нажатия клавиатуры, когда окно графика находится в фокусе",
"CHARTEVENT_OBJECT_CREATE — событие создания графического объекта",
"CHARTEVENT_OBJECT_CHANGE — событие изменения свойств объекта через диалог свойств",
"CHARTEVENT_OBJECT_DELETE — событие удаления графического объекта",
"CHARTEVENT_CLICK — cобытие щелчка мыши графике",
"CHARTEVENT_OBJECT_CLICK — событие щелчка мыши на графическом объекте, принадлежащего графику",
"CHARTEVENT_OBJECT_DRAG — событие перемещения графического объекта при помощи мыши",
"CHARTEVENT_OBJECT_ENDEDIT — событие окончания редактирования текста в поле ввода графического объекта LabelEdit",
"CHARTEVENT_CHART_CHANGE  — событие изменения графика",
"CHARTEVENT_CUSTOM+n — идентификатор пользовательского события, где n находится в диапазоне от 0 до 65535"
};
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
   Print("id=(",id,") -- ",event[id],"  lparam=",lparam,"   dparam=",dparam,"   sparam=", sparam);
  }
//+------------------------------------------------------------------+

Recebo eventos que não correspondem a acções.

Corresponde exactamente a um clique no gráfico e a um clique de um botão

Um evento controverso id=9(CHARTEVENT_CUSTOM), que é gerado quando, por exemplo, o gráfico é deslocado e há cerca de 10 eventos semelhantes.

O eventoCHARTEVENT_OBJECT_ENDEDIT não foi verificado.

Todo o resto não é claro. Ou a descrição não corresponde ao número do evento ou o evento de criação de um objecto é gerado incorrectamente quando se cria um objecto manualmente.

Em geral, por favor, ajudem.

 
kPVT:

Tenho um perito com o qual tento lidar com os acontecimentos.

Recebo eventos que não correspondem a acções.

Corresponde exactamente a um clique no gráfico e a um clique de um botão

Um evento controverso id=9(CHARTEVENT_CUSTOM), que é gerado quando, por exemplo, o gráfico é deslocado e há cerca de 10 eventos semelhantes.

O eventoCHARTEVENT_OBJECT_ENDEDIT não foi verificado.

Nem tudo é claro com todo o resto. Ou a descrição não corresponde ao número do evento ou o evento de criação de um objecto é gerado incorrectamente quando se cria o objecto manualmente.

Em suma, por favor, ajudem.

Inicialmente atribui correspondências numéricas às constantes numéricas já atribuídas CHARTEVENT_XXXXXXXXXX...

o problema é este:

event[id]

é necessário:

//--- нажатие мышкой на графическом объекте
   if(id==CHARTEVENT_OBJECT_CLICK)
     {
      Print("Нажатие кнопки мышки на объекте с именем '"+sparam+"'");
     }
//--- нажатие кнопки на клавиатуре
   if(id==CHARTEVENT_KEYDOWN)
     {
 
kPVT:

O resto não é claro. Ou a descrição não corresponde ao número do evento, ou o evento da criação do objecto, por exemplo, não é gerado correctamente quando o objecto é criado manualmente.

Infelizmente, a sua pergunta não é clara. O que é que está exactamente a correr mal?