[ARQUIVO]Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por ela. Não posso ir a lugar nenhum sem você - 5. - página 234

 
deyron:
Olá. Você pode me dizer se um EA é anexado a várias janelas de pares de moedas ao mesmo tempo, então mudanças no EA em uma janela afetam o EA na outra janela???? ou seja, variáveis locais são alteradas ou não????


Se você trocar o magik pelo mesmo EA, então os EAs trabalharão separadamente cada um em sua própria janela.

 

EU REALMENTE PRECISO DE AJUDA NO REDESENHO DE MINHA EA!!!

Estou feliz com tudo o que há nele, só gostaria de poder.... Se você não puder traduzir um negócio para obter lucro, então feche-o no oposto de um novo sinal para abrir sem alterar a estratégia comercial. Por exemplo, se o negócio de Sell se virou e Owls não o transferiu para Breakeven, ele começa uma nova vela para abrir um negócio de Sell com volume crescente esperando por um recuo, e eu quero que ele continue trabalhando como se tivesse fechado o negócio em Stop Loss/Take... se o preço se inverter, abre a compra, e fecha esta, embora com um grande menos.... Assim

/*descompilado apagado*/

 
deyron:
Olá. Você pode informar se uma EA é anexada a várias janelas de pares de moedas, então mudanças na EA em uma janela afetam a EA em outra janela???? ou seja, as variáveis locais mudam ou não????
Não, eles não afetam uns aos outros. A mesma posição mágica só pode ser prejudicial quando a EA determina o fechamento da posição somente por magia.
 

Bom dia para todos. O problema é algo como isto: eu tenho uma variável bool line_1=false; muda para verdade; ao atingir um preço e fazer níveis de alcance que serão outras ações e linha bool_1 novamente se torna falso; preciso reiniciar o sistema ou os parâmetros não serão alcançados na sexta-feira à noite, os valores desta variável são perdidos e afetarão o resultado da negociação, pois entendo que preciso torná-los variáveis globais de bool. ainda não fiz nada a respeito e preciso de seus conselhos se achar que vou fazer correções no código, por favor me diga se algo precisa ser feito, obrigado.

bool line_1=GlobalVariableGet(false);

if(macd_2<0&&macd_1>0) {line_1=GlobalVariableSet(true);}

if(macd_2>0&&macd_1<0) {line_1=GlobalVariableSet(false);}

Se o código for construído de tal forma, então ao reiniciar o terminal, a variável deixará seu valor anterior no momento do reinício ou será reinicializada para o estado declarado no início do programa? Mais uma vez, obrigado!

 
paladin80:
Não, eles não afetam uns aos outros. A mesma posição mágica só pode ser prejudicial quando a EA determina o fechamento da posição apenas por magia.

Sim, você pode, é claro, filtrar de forma diferente. Por exemplo, por símbolo, etc. Eu disse a opção mais simples.
 
laveosa:

bom dia a todos. por favor, me ajude a entender as variáveis globais. o problema é algo assim: eu tenho uma variável bool line_1=false; muda para verdade; ao atingir um preço e fazer níveis de alcance que serão outras ações e linha bool_1 novamente se torna falso; preciso reiniciar o sistema ou os parâmetros não serão alcançados na sexta-feira à noite, os valores desta variável são perdidos e afetarão o resultado da negociação, pois entendo que preciso torná-los variáveis globais de bool. ainda não fiz nada a respeito e preciso de seus conselhos se achar que vou fazer correções no código, por favor me diga se algo precisa ser corrigido, obrigado.

bool line_1=GlobalVariableGet(false);

if(macd_2<0&&macd_1>0) {line_1=GlobalVariableSet(true);}

if(macd_2>0&&macd_1<0) {line_1=GlobalVariableSet(false);}

Se o código for construído de tal forma, então ao reiniciar o terminal, a variável deixará seu valor anterior no momento do reinício ou será reinicializada para o estado declarado no início do programa? Mais uma vez, obrigado!

Primeiro, leia sobre GlobalVariableSet() - você não tem parâmetros e usa-o de forma incorreta.

E a seqüência de operações é a seguinte: quando o valor da variável que você deseja salvar mudanças, este valor é passado para a variável global apropriada do terminal usando esta função. E ao reinicializar a EA init(), você passa seu valor para a variável através da função GlobalVariableGet().

 

Cavalheiros, por favor, me dêem uma dica!

Estou tentando implementar uma idéia simples, que é descrita nos comentários ao programa.

O programa abre pedidos no TESTER a um preço que não coincide com os especificados no código.

Por exemplo, o pedido abre ao preço de 0,86084, enquanto que o valor mais próximo na matriz é de 0,85375.

A diferença é positiva enquanto o código especifica para abrir ordens se a diferença for < 0,00000, ou seja, negativa.


Favor nos informar onde o erro está localizado.

Obrigado.

int start()
{
 double Price=iOpen (Symbol (),0,0);        
 double SL=NormalizeDouble (Price-3000*Point, Digits);         
 double TP=NormalizeDouble (Price+100*Point, Digits);    
 #include <MASSIV.mqh> //объявление массива типа double (неповторяющиеся значения цены с пятью знаками после точки)
 double value =  Bid ;//параметру value функции ArrayBsearch присваивается значение  цены последнего тика

 int S = ArrayBsearch(  massiv,  value, WHOLE_ARRAY,  0, MODE_ASCEND);//функция возвращает индекс значения цены макс. близкой к цене последнего тика 
 if( (NormalizeDouble (Bid-massiv[S],Digits) <=0))//если разница между значением массива возвращенным на последнем тике и ценой последнего тика отрицательная или = 0.00000


{
                        
 OrderSend(Symbol(),OP_BUY,0.1,Ask,1,SL,TP,"jfh",123 );//ордер открыть
 
solnce600:

Cavalheiros, por favor, me dêem uma dica!

Estou tentando implementar uma idéia simples, que é descrita nos comentários ao programa.

O programa abre pedidos no TESTER a um preço que não coincide com os especificados no código.

Por exemplo, o pedido abre ao preço de 0,86084 com o valor mais próximo de 0,85375 na matriz.

A diferença é positiva, enquanto que o código especifica para abrir ordens se a diferença for < 0,00000, ou seja, negativa.

Favor nos informar onde o erro está localizado.

Obrigado.

A melhor maneira de encontrar o erro é passar por cada linha de baixo para cima e ver como ele corresponde ao que você quer obter e ao que está escrito.

if ((NormalizeDouble (Bid-massiv[S],Digits) <=0))
//если разница между значением массива возвращенным на последнем тике и ценой последнего тика отрицательная или = 0.00000
Esta condição pressupõe que... - É isto o que você pretendia???? (1 - 1000000 <= 0) - satisfaz????

Eu lhe dei uma solução e você "passou por ela"...

 
TarasBY:

A maneira de encontrar erros: percorrer cada linha de baixo para cima e perceber a correspondência entre o que você queria e o que está escrito.

Esta condição pressupõe que... - É isto o que você pretendia? (1 - 1000000 <= 0) - satisfaz????

Eu lhe dei uma solução e você "passou por ela"...

Muito obrigado. Eu até copiei sua dica para mim mesmo.... Não entendi totalmente..... desculpe minha estupidez .... Eu vou rachar meus miolos e tentar descobrir isso.

Só não entendo porque você toma o valor da variável Bid (preço do último tick) como 1. Presumo que seja um valor de 6 dígitos com um ponto decimal após o primeiro... e o valor de

Por favor, diga-me o que eu posso entender mal.

Estudei cuidadosamente seu código.

double ld_Delta = 10. * Ponto;
if (NormalizeDouble (MathAbs (Bid - Bid - Price), Digits) <= ld_Delta)//
e este preço é o preço aberto de um novo bar
{OrderSend(Symbol(),OP_BUY,0.1,Ask,3,SL,TP, "jfh",123);}//abriro pedido


Mas eu não entendo

-Por que você sugere o uso da variável Preço em vez da variável massiv[S] ? Ele contém o preço aberto do último bar.

Minha idéia é que uma das condições necessárias para abrir um pedido é a coincidência de seu preço aberto com um dos valores da matriz mais próximos do preço do último tick.

Minha estratégia na íntegra se parece com esta

PEDIDO ABERTO se 2 condições forem cumpridas ao mesmo tempo

-O preço aberto da última vela

ao preço mais próximo de um dos valores da matriz (valores da matriz - cerca de 2000 valores de preços de licitação não-repetentes indo em ordem aleatória)

Serei muito grato por sua ajuda e dica - mas tenho sido intrigado pelo segundo dia ..... e tudo isso em vão.


	          
 
solnce600:

Muito obrigado. Eu até copiei essa sua dica.... Não entendi totalmente..... Desculpe a estupidez .... Eu vou rachar meus miolos e tentar descobrir isso.

Só não entendo porque você toma o valor da variável Bid (preço do último tick) como 1. Presumo que seja um valor de 6 dígitos com um ponto decimal após o primeiro... e o valor de

Por favor, diga-me o que eu posso entender mal.

Estudei cuidadosamente seu código.

double ld_Delta = 10. * Ponto;
if (NormalizeDouble (MathAbs (Bid - Bid - Price), Digits) <= ld_Delta)//
e este preço é o preço aberto de um novo bar
{OrderSend(Symbol(),OP_BUY,0.1,Ask,3,SL,TP, "jfh",123);}//abriro pedido

Mas eu não entendo

-Por que você sugere o uso da variável Preço em vez da variável massiv[S] ? Ele contém o preço aberto do último bar.

Minha idéia é que uma das condições necessárias para abrir um pedido é a coincidência de seu preço aberto com um dos valores da matriz mais próximos do preço do último tick.

Minha estratégia na íntegra se parece com esta

PEDIDO ABERTO se 2 condições forem cumpridas ao mesmo tempo

-O preço aberto da última vela

ao preço mais próximo de um dos valores da matriz (valores da matriz - cerca de 2000 valores de preços de licitação não-repetentes indo em ordem aleatória)

Serei muito grato a vocês pela ajuda e pelas dicas - tenho estado confuso sobre ..... pelo segundo dia, mas isso não tem nenhum efeito.

Para entender o que está acontecendo, preciso levar os cálculos para a gráfica:

    //если разница между значением массива возвращенным на последнем тике 
    // и ценой последнего тика отрицательная или = 0.00000
    if ((NormalizeDouble (Bid-massiv[S], Digits) <= 0))
    {
        Print ("massiv[", S , "] = ", massiv[S], " | massiv[", S - 1, "] = ", massiv[S-1], " | massiv[", S + 1, "] = ", massiv[S+1], " | Bid = ", Bid);
        OrderSend(Symbol(),OP_BUY,0.1,Ask,1,SL,TP,"jfh",123 );//ордер открыт
    }
e analisar os resultados.
Razão: