[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 616

 
xant:

rigonich

Vinte e cinco novamente. Eu perguntei muito especificamente se eu havia dado o primeiro passo correto. Você não respondeu a uma pergunta direta, você não disse uma palavra em substância.

Sim, claro, eu li um livro didático, mas como tenho uma profissão que não tem nada a ver com programação, é claro que estou pedindo um algoritmo claro, simples e concreto. Quão difícil é entender? Se você acha difícil responder sobre os méritos, então por que se preocupar? Basta ir embora.

E como comentário - você não tem idéia de quantas pessoas eu conheço que eu, como clínico geral, posso chamar de estúpidas. É difícil imaginar que os adultos não entendam as perguntas básicas sobre sua própria saúde. Se eu reagir a todos da maneira como vocês reagem, então não terei valor como especialista. Durma bem.

_______________

Por favor - alguém me mande um e-mail para neroy(dog)mail.ru que pode pegar o código EA e colar o que você precisa no lugar certo.


Você não pediu para pegar sua EA e colar o código necessário nela, você não postou o código EA, primeiro você pediu ajuda para resolver o problema da perda de dados ao desligar a EA, quando você fez isso, você insultou aquele que o ajudou, depois você perguntou se você deu o "primeiro passo" certo, e quando lhe disseram que estava errado e apontaram erros específicos, você insultou novamente aqueles que estão lhe ajudando, então eu acho que ninguém mais iria querer fazer isso.

P.S. Não consigo nem pensar em um algoritmo mais fácil e claro do que pegar duas funções prontas, copiá-las no meu EA e colocar uma no início do init e a outra no final do init.

 
rigonich:

Na verdade, é o seu código, parcialmente corrigido por outra pessoa.


meu código não deu nenhum erro. Mas também não deu nenhum resultado.

E seu código nem funcionou, porque 24 erros....

mas eu tive a idéia... e agora funciona.

 

O compilador, é claro, é desumano. Agora meu cérebro está quase quebrado quanto ao porquê do erro estar mostrando

(' - definição da função inesperada G:\Program_Files_2\MT4-demo\experts\3.mq4 (139, 14)

enquanto este consultor especializado trabalhou como um encanto ontem, mas hoje eu apenas abri um longo IF em vários curtos se....

Acontece que eu perdi uma vírgula invertida sobre um KILLOMETRO de onde o compilador mostrou o erro! Além disso, ele estava em silêncio sobre a vírgula invertida, ele não estava satisfeito com a FUNÇÃO, você vê....:((((((((

 

rigonich

Eu poderia responder ponto por ponto a cada palavra sua, mas não vejo mais o ponto. Se alguém é teimoso, não vale a pena explicar nada. A questão era como se organizar. Então, quando você deu uma dica de que variáveis globais são melhores do que escrever em um arquivo, surgiu a pergunta sobre como fazê-lo corretamente. Então seu nervoso co-signatário deu um pedaço de código, não perdendo uma oportunidade de gracejar. É simples - parte do código vai para o bloco de inicialização, parte do bloco vai para o bloco principal da EA.

Isto é o que vai para o bloco de inicialização:

 void fGet_MineGV (string fs_PrefName = "") // префикс имени переменной
     {
        string ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_1");
        if (GlobalVariableCheck (ls_Name)) SUA = GlobalVariableGet (ls_Name);
        ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_2");
        if (GlobalVariableCheck (ls_Name)) SUA1 = GlobalVariableGet (ls_Name);
        ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_3");
        if (GlobalVariableCheck (ls_Name)) BUA = GlobalVariableGet (ls_Name);
        ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_4");
        if (GlobalVariableCheck (ls_Name)) BUA1 = GlobalVariableGet (ls_Name);
     }

Isto é o que vai para o bloco principal

 void fSave_MineGV (string fs_PrefName = "") // префикс имени переменной
{
 static datetime ldt_NewBar;
 datetime ldaTBeginBar = iTime (Symbol(), 1, 0)
 //---- Сохраняемся в начале каждой минуты
 if (ldt_NewBar == ldaTBeginBar) return;
 ldt_NewBar = ldaTBeginBar;
 //---- Сохраняем поочереди значения каждой переменной
 string ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_1");
 GlobalVariableSet (ls_Name, SUA);
 ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_2");
 GlobalVariableSet (ls_Name, SUA1);
 ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_3");
 GlobalVariableSet (ls_Name, BUA);
 ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_4");
  GlobalVariableSet (ls_Name, BUA1);
}

Como você pode ver, eu renomeei as variáveis.

Assim, eu inseri sequencialmente a segunda parte do código, começando imediatamente após o cálculo das variáveis e até o final do bloco inicial, terminando com uma tentativa de inserir antes do último parêntese.

A julgar por sua explicação altamente profissional, isso é o que eu deveria ter feito, pois é claro para qualquer iniciante. De acordo com você, deve funcionar. Mas não. Aqui está o melhor que eu consegui alcançar:

8 error(s), 0 warning(s)        
 

não conseguiu encontrar a função correta na biblioteca

TakeProfit tamanho da última posição fechada.

Talvez alguém tenha um?

 

Essas correntes são permitidas?

se ( (A===1 && B====2) && (C===2 || D===3) && E====4)

ou seja, ambos E e OU em uma linha?

 
 lottamer:

Essas correntes são permitidas?

se ( (A===1 && B====2) && (C===2 || D===3) && E====4)

ou seja, ambos E e OU em uma linha?


A resposta é sim. Alguns idiomas não são permitidos? O que, eles têm que reduzir tudo a formas conjuntivas e disjuntivas-normais?
 
lottamer:

não conseguiu encontrar a função correta na biblioteca

Tamanho Takeprofit da última posição fechada.

Talvez alguém tenha um?


Escreva você mesmo - há 1 único laço. Basta tentar fazer isso. E se você falhar, mostre-nos o código do seu laço - nós o ajudaremos.
 
xant:

rigonich

Eu poderia responder ponto por ponto a cada palavra sua, mas não vejo mais o ponto. Se alguém é teimoso, não vale a pena explicar nada. A questão era como se organizar. Então, quando você deu uma dica de que variáveis globais são melhores do que escrever em um arquivo, surgiu a pergunta sobre como fazê-lo corretamente. Então seu nervoso co-signatário deu um pedaço de código, não perdendo uma oportunidade de gracejar. É simples - parte do código vai para o bloco de inicialização, parte do bloco vai para o bloco principal da EA.

Isto é o que vai para o bloco de inicialização:

Isto é o que vai para o bloco principal

Como você pode ver, eu renomeei as variáveis.

Assim, eu inseri sequencialmente a segunda parte do código, começando imediatamente após o cálculo das variáveis e até o final do bloco inicial, terminando com uma tentativa de inserir antes do último parêntese.

A julgar por sua explicação altamente profissional, isso é o que eu deveria ter feito, porque é claro para qualquer iniciante. De acordo com você, deve funcionar. Mas não. Aqui está o melhor que eu consegui alcançar:


Leia com atenção. Estes dois blocos são chamados de descrições de funções, e não podem ser colocados dentro de outras descrições de funções. No init deve ser colocado

{
fGet_MineGV();
}

e em iniciar uma chamada semelhante à segunda função. as próprias funções precisam ser colocadas separadamente em sua EA, nem no init nem no início em qualquer função personalizada.

Eseu nervoso co-signatário não lhe deu parte do código, mas duas funções prontas que ele escreveu para você.

 
lottamer:

Essas correntes são permitidas?

se ( (A===1 && B====2) && (C===2 || D===3) && E====4)

ou seja, ambos E e OU em uma linha?


Sim, o compilador trata tudo encerrado entre parênteses como uma comparação separada.
Razão: