[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 526

 
Bom dia! A condição não funciona
bool CCInapravlenie=false;
if( CCI_50S>100&&CCI_50<100 ||CCI_50S>0&&CCI_50<0|| CCI_50S>-100&&CCI_50<-100 )CCInapravlenie=true;

if(CCInapravlenie){ imja = DoubleToStr(Time[0], 0); 
ObjectCreate(imja, 22, 0, iTime(NULL,0,0),iLow(NULL,0,0)-0.0001);ObjectSet(imja, OBJPROP_ARROWCODE, 241);
ObjectSet(imja, OBJPROP_COLOR , Yellow); // стрелка жолтая 
}//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

Eu já olhei para o ife string, olhei para ele, olhei para ele, olhei para ele.... Deve haver alguma razão, posso estar confuso e não ver algo simples e elementar, isso acontece.

Eu olhei de manhã. Eu saí. Voltei e olhei novamente. É mais fácil agora, se, mais, menos... Eu não entendo nada.



E isto está sob meu comando.
double EMA_10 = iMA( NULL, 0, 10, 0, MODE_EMA, PRICE_CLOSE, 0);
double EMA_20 = iMA( NULL , 0, 20, 0, MODE_EMA, PRICE_CLOSE, 0);
double LMA_100 =iMA( NULL , 0, 100, 0, MODE_LWMA, PRICE_CLOSE, 0);
double МА_30 = iMA( NULL , 0, 30, 0, MODE_SMA, PRICE_CLOSE, 0);
double CCI_50 = iCCI( NULL, 0, 50, PRICE_CLOSE, 0);

double EMA_10S = iMA( NULL, 0, 10, 0, MODE_EMA, PRICE_CLOSE, 1);
double EMA_20S = iMA( NULL , 0, 20, 0, MODE_EMA, PRICE_CLOSE, 1);
double LMA_100S =iMA( NULL , 0, 100, 0, MODE_LWMA, PRICE_CLOSE, 1);
double МА_30S = iMA( NULL , 0, 30, 0, MODE_SMA, PRICE_CLOSE, 1);
double CCI_50S = iCCI( NULL, 0, 50, PRICE_CLOSE, 1);


p.s. Faz tudo parte desta condição estratégica

EMA - período 10 cruzes de cima para baixo EMA - período 200 , CCI cruza 0,100 ou 100 de cima para baixo; Vela fecha ou está abaixo de LMA - período 100
 
TheXpert:
0x é exatamente o número de 16 dígitos.

Obrigado.
 

Sem flechas amarelas. O diabo sabe. E mesmo que a condição zirk funcione!!!!

Condição Zirk.

bool napravlenieCCI=false;
 if( CCI_50S<100&&CCI_50>100 ||CCI_50S<0&&CCI_50>0|| CCI_50S<-100&&CCI_50>-100  )napravlenieCCI=true;
  if(napravlenieCCI){  string imja = DoubleToStr(Time[0], 0);
  ObjectCreate(imja, 22, 0, iTime(NULL,0,0),iHigh(NULL,0,0)+0.0004); 
  ObjectSet(imja, OBJPROP_ARROWCODE, 242);
  Print(" ObjectSet242  ", GetLastError());
  ObjectSet(imja, OBJPROP_COLOR , Red);Print(" сOBJPROP_COLO  ", GetLastError());}

Captura de tela

 
TarasBY:

Você não preenche o índice 0 das matrizes indicadoras,

você se refere a ela:

É um pouco (estruturalmente) tortuoso, mas serve pela primeira vez. Meu conselho: "Acostume-se a corrigir imediatamente as abordagens para escrever código. Por exemplo, use esta condição em seu código:

É analfabeto, porque mais cedo ou mais tarde, você deixará o testador para o comércio on-line e vários EAs podem estar funcionando em paralelo, e este código não vai funcionar.


Obrigado por sua resposta!

Eu vou saber. Você deveria estudar mais as matrizes.

Eu escrevi a condição "Total==0" apenas para verificar rapidamente minha idéia na prática. Agora vou procurar na Base de Código e tentar encontrar algo semelhante para corrigir esta condição.

Concordo plenamente com você. Você deve aprender a escrever o código corretamente. Vou me corrigir.

Muito obrigado por sua ajuda.



 
Vinin:

O que você não gosta em iHighest() e iLowest()?


Eu não conhecia estas funções. Vou tentar agora.

Obrigado pela informação!

 
TheXpert:
0x é exatamente o número de 16 dígitos.

Hexadecimal refere-se a ambos, por exemplo, 0x0000 em C, 0000H em montadores.
 

Olá.

Você pode me dizer como eu posso adicionar as informações que recebo ao arquivo? Isto é, eu recebo um número, ele precisa ser escrito no arquivo - no final do arquivo sem deletar todo o seu conteúdo.

Parece que o FileWriteString foi escrito para o vazio em vez do que existe... alguém pode me dar um exemplo de como fazê-lo corretamente?

... Além disso, a gravação é feita, se for feita, em uma codificação incompreensível que é ilegível -(

Obrigado.

 
TarasBY:

Você não preenche o índice 0 das matrizes indicadoras,

você se refere a ela:

É um pouco (estruturalmente) tortuoso, mas serve pela primeira vez. Meu conselho: "Acostume-se a corrigir imediatamente as abordagens para escrever código. Por exemplo, use esta condição em seu código:

Porque mais cedo ou mais tarde, você deixará o Strategy Tester e mudará para o comércio on-line, onde vários EAs estão funcionando em paralelo e este código não funcionará.


Tanto quanto sei, preciso refazê-lo desta maneira:

double L_1= iCustom(NULL,0,"Go_go",K,0,1);  //Линия минимума
double L_2= iCustom(NULL,0,"Go_go",K,1,1);  //Линия максимума 

O mesmo problema novamente. Quando eu lanço o Expert Advisor, ele abre uma ordem de venda imediatamente.

Você pode explicar por quê?

 
Pacman:


Tanto quanto sei, preciso refazê-lo desta forma:

O mesmo problema novamente. Quando eu dirijo o Expert Advisor, ele abre imediatamente uma ordem de venda.

Você pode explicar por quê?

Substituir:

  double L_1= iCustom(NULL,0,"Go_go",K,0,0);  //Линия минимума
  double L_2= iCustom(NULL,0,"Go_go",K,1,0);  //Линия максимума 

Para:

  double L_1= Low[iLowest (NULL, 0, MODE_LOW, K, 1)];;    //Значение минимума
  double L_2= High[iHighest (NULL, 0, MODE_HIGH, K, 1)];;  //Значение максимума 

E por que uma ordem de venda se abre (em sua versão) (com base no que eu disse anteriormente), encontre você mesmo a resposta!!!

 

Eu coloco bandeiras para a direção do comércio. Condição: Se cair em uma zona entre as linhas, então compre e não venda, se em outra zona, então não compre e venda. Eu regulamento este processo com linhas horizontais.

extern bool    Покупать  = false;
extern bool    Продавать = false; 


   if ( pcb < Ask && Ask < pl )       // Если Аск цены попал в зону между Уровнем и КлозеБай,
    {                             
     Покупать = false;                // останавливаем покупку
     Продавать = true;
    }
   if ( pl < Bid && Bid < pcs )       // Если Бид цены попал в зону между Уровнем и КлозеСелл,
    {                            
     Продавать = false;               // останавливаем продажи (контрольный флаг)
     Покупать = true;
    }
   if ( pl < Bid && Bid < pb )        // Если Бид цены попал в зону между Уровнем и Покупкой,
    {                                 // начинаем покупать
     Покупать = true;
    }
   if ( pl > Ask && Ask > ps )        // Если Аск цены попал в зону между Уровнем и Продажей,
    {                                 // начинаем продавать
     Продавать = true;             
    }

Antes disso, peço os preços das linhas expostas. E depois disso, um bloco de ordens de colocação ou fechamento - dependendo da bandeira.

O código é trivialmente simples. Mas... - Pergunta...

Quando este projeto começa a funcionar, os valores de compra e venda se revelam imprevisíveis (caóticos). Porque existem condições claras para a função "se" e operadores "mais/menos" e "mais/menos".

Ou seja, o programa se comporta de acordo com suas próprias razões: ou compra, vende ou não faz nada, independentemente do que está escrito nos valores das variáveis.


Como e o que eu preciso escrever para que as condições funcionem e, mais importante ainda, para que funcionem? O que estou fazendo de errado e o que não estou levando em conta? (Acho que mencionei tudo o que preciso nas condições de função).


Há também outra questão neste tópico: quando as variáveis mudam dependendo das condições, seus valores nas configurações do Expert Advisor (ao acessá-las via F7) serão os mesmos que foram definidos pelo usuário. É por isso que é impossível ver o estado atual dessas variáveis. Como podemos fazer para que possamos ver quais são seus valores no momento?