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

 
drknn:

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


Eu tenho um problema com os ciclos.

Já vi o início muitas vezes...

em seguida, é nebuloso....

para (i=0; i<k; i++) {

se(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)

o máximo que posso entender é que cada i é designado ...algo

Mas o que fazer com essa mistura de i... Não tenho idéia...

 

rigonich

Bem, finalmente está começando a fazer sentido. Assim, as cordas curtas em aparelho encaracolado são chamadas de função, e as próprias funções precisam ser colocadas em algum lugar.

Agora em ordem.

Eu adiciono uma chamada da primeira função ao init, eu faço isso imediatamente após iniciar a função init, ou seja, assim, será correto, certo?

int init()
{
    fGet_MineGV();
}
//... и далее мой код, который был ранее

Da mesma forma, eu acrescento a chamada da segunda função ao bloco inicial. Se eu fizer isso imediatamente após o cálculo das variáveis, isso seria correto? Por exemplo, como este:

     if ((A1>0)&&(A2>0)&&(A3>0)&&(A4>0)&&(A5>4.5)&&(VVV>V_NN)&&(SUA==0))
{
SUA=100;
SUA1+=1;
}
if((A1>0)&&(A2>0)&&(A3>0)&&(A4>0)&&(A5>4.5)&&(VVV<2)&&(VVV>0)) 
SUA=0;
if ((BUA==100)&&(A5<-4.5))
{
SUA=0;
SUA1=0;
}

     if ((A1<0)&&(A2<0)&&(A3<0)&&(A4<0)&&(A5<-4.5)&&(VVV>V_NN)&&(BUA==0))
{
BUA=100;
BUA1+=1;
}
if ((A1<0)&&(A2<0)&&(A3<0)&&(A4<0)&&(A5<-4.5)&&(VVV<2)&&(VVV>0)) 
BUA=0;
if ((SUA==100)&&(A5>4.5))
{
BUA=0;
BUA1=0;
}
//...сюда вставляю...
{
    fSave_MineGV();
}
//...и далее опять мой код...

Estes dois primeiros passos estão corretos?

И нервный ваш согестник  дал вам не часть кода, а две готовые функции, которые он дя вас написал. 
Bem, na verdade eu lhe agradeci imediatamente por isso.
 

Como posso sair de uma série if se a condição if=verdadeiro?

se

se

se (VERDADEIRO) - mas precisa começar tudo de novo, e não vá mais longe

se

se

.......

 
lottamer:

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

TakeProfit tamanho da última posição fechada.

Talvez alguém tenha um?


O tamanho do take profit na moeda do depósito é devolvido pela OrderProfit(), em pips - preço de fechamento menos preço de abertura, e como encontrar a última posição fechada ou onde obter uma função pronta para isso, acredito, foi explicado a você várias vezes.
 
lottamer:

Como posso sair de uma série if se a condição if=verdadeiro?

se

se

se (VERDADEIRO) - mas precisa começar tudo de novo, e não vá mais longe

se

se

.......


se

se

se (VERDADEIRO) - mas você precisa começar tudo de novo, e não subir mais na escada

senão {

se

se

.......

}//se (VERDADEIRO) - mas precisa começar tudo de novo e não subir mais na escada

Na verdade, em cerca de 99,9% dos casos isso significa que você não pensou o suficiente sobre a implementação do algoritmo.

 
VladislavVG:

se

se

se (VERDADEIRO) - mas você precisa começar tudo de novo, e não subir mais na escada

senão {

se

se

.......

}//se (VERDADEIRO) - mas precisa começar tudo de novo e não subir mais na escada

Na verdade, em cerca de 99,9% dos casos isso significa que você não pensou o suficiente na implementação do algoritmo.


:))) já parece ter encontrado uma solução

retornar (0) - e maravilhosamente sai tudo se

 
VladislavVG:

se

se

se (VERDADEIRO) - mas você precisa começar tudo de novo, e não subir mais na escada

senão {

se

se

.......

}//se (VERDADEIRO) - mas precisa começar tudo de novo e não subir mais na escada

Na verdade, em cerca de 99,9% dos casos isso significa que você não pensou o suficiente sobre a implementação do algoritmo.

Com },senão, voltar, ou quebrar ou continuar (para loops).
 
rigonich:

O tamanho do take profit na moeda do depósito é devolvido pela função OrderProfit(), em pontos - preço fechado menos preço aberto. Acho que foi explicado a você várias vezes como encontrar a última posição fechada ou onde obter uma função pronta para ela.


Exatamente. Você deve primeiro pegar o bilhete da última posição fechada GetTicketLastPos , e depois usar as funções padrão para tirar o que você precisa deste bilhete.

Obrigado.

 
xant:

rigonich

Bem, finalmente está começando a fazer sentido. Assim, as cordas curtas em aparelho encaracolado são chamadas de função, e as próprias funções precisam ser colocadas em algum lugar.

Agora em ordem.

Eu adiciono uma chamada da primeira função ao init, eu faço isso imediatamente após iniciar a função init, ou seja, assim, será correto, certo?

Da mesma forma, eu acrescento a chamada da segunda função ao bloco inicial. Se eu fizer isso imediatamente após o cálculo das variáveis, isso seria correto? Por exemplo, como este:

Estes dois primeiros passos estão corretos?

Bem, na verdade eu lhe agradeci imediatamente por isso.


Quase. No inite, retire o primeiro { que você tinha antes de inserir a chamada, no início -- tanto{} antes quanto depois da chamada. Agora você só precisa copiar o código de função, colocá-lo depois de todo o seu código EA e compilar o EA.

Desculpe, meu erro, é difícil quando não há código na frente dos meus olhos. Aí está.

int init()
{
fGet_MineGV();
//... и далее мой код, который был ранее (без первой { )
 

rigonich

Eu removi os parênteses para deixar um número par de parênteses. Ou seja, ambas as funções são inseridas sem parênteses curvos.

O resultado é o seguinte:

int init()
{
    fGet_MineGV();
//... и далее мой код
//...разрыв кода...
if ((SUA==100)&&(zigNN>4.5))
{
BUA=0;
BUA1=0;
}

fSave_MineGV();
//... продолжение моего кода...

Então, depois de todo o código EA I inserido

}
}
}


Comment(fd+f+d);

}
//... тут мой советник закончился


        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);
     }
               
      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);
}

Presumo que, de fato, após o último parêntese, separadamente da EA. É correto?

Se estiver certo, então isto é o que você recebe após a compilação:

'fGet_MineGV' - function already defined and has a body         K:\TEST\experts\01___AUDUSD.mq4 (1679, 14)
'ls_Name' - variable already defined                            K:\TEST\experts\01___AUDUSD.mq4 (1681, 16)
2 error(s), 0 warning(s)        

Извиняюсь, ошибся, сложно, когда нет кода пнред глазами.Вот так.
Se o código fosse curto, eu o colocaria aqui e todos os meus problemas seriam resolvidos rapidamente. MAS a EA tem 1700 linhas, mais 3 indicadores externos, nos quais a maior parte do cálculo é feita... Portanto, apenas pelo correio, mas obviamente não é mais feito de graça.