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

 
rigonich:

A propósito, intrigado com esta questão por muito tempo, mas nunca descobriu, simplesmente esqueceu. Onde o testador obtém os valores de stopplay? Se os valores reais podem ser alterados pelo servidor, então o resultado do teste deve depender do tempo do teste, o que não é o caso, eu verifiquei. Ou o valor armazenado nas propriedades do símbolo e o valor dado pelo servidor a pedido não é o mesmo?
As variáveis do ambiente de mercado estão no arquivo de serviço symbols.raw (presumivelmente), que está na pasta do histórico do servidor. Quando não há conexão com o servidor ou nos fins de semana, o terminal pega os últimos dados deste arquivo.
 
xant:

rigonich

Isto é algum tipo de brincadeira ou algo assim? Onde você ri?

TarasBY

Você não pode? Então não o faça.

Ouça, seu anormal orelhudo, você foi ajudado, e não pode nem mesmo trazer um código pronto em seu Consultor Especialista! E você está apenas abrindo sua boca. Você pode ao menos explicar a um idiota! BY.
 

TarasBY

não está se movendo, idiota. Você é a aberração. Porque você não consegue nem mesmo articular duas palavras corretamente em russo.

Você é um idiota? Bem, eu não preciso torturá-lo. Descanse um pouco.

 
TarasBY:
As variáveis do ambiente de mercado estão no arquivo de serviço symbols.raw (presumivelmente), que está localizado na pasta do histórico do servidor. Quando não há conexão com o servidor ou nos fins de semana, o terminal recebe os últimos dados deste arquivo.


Obrigado.
 
xant:

rigonich

Isto é algum tipo de brincadeira ou algo assim? Onde você ri?

TarasBY

Você não pode? Bem, você não deveria ter.

Escrevi em russo - não há quase nada sobre a declaração de variáveis globais no livro didático. Por exemplo, eu não sei o que é fGet_MineGV();

É uma função? Se for, o que ele faz? A busca por fGet no livro didático produz resultados zero.

O que devo declarar no int init() ? Você já escreveu:

{
fGet_MineGV();
}


Aqui na minha EA, a inicialização do init se parece com isto:

int init()
{
ArrayInitialize(buf3,0);
ArrayInitialize(b1,0);
ArrayInitialize(b2,0);
ArrayInitialize(b3,0);
ArrayInitialize(b4,0);


Comentário("Calcular valor médio "+ind");
m1=NormalizarDuplo(iCustom(NULL,tf,ind+"_a",0,0),2);
string d="Valor médio "+ind+"+DoubleToStr(m1,2);
tm=TimeCurrent();
int q=0,ticket=-1;
duplo opr=0,lote1=0;
for(q=0;q<OrdersTotal();q++)
{

e assim por diante, mais 100 linhas. Para onde, em que lugar, e o mais importante, o que exatamente devo declarar aqui? É realmente tão difícil escrever em russo? Vamos dobrar nossos dedos, sim.

Isto é uma função? Em caso afirmativo, o que ele faz? A pesquisa do fGet no livro didático dá zero resultados.

Sim, esta função, e não pode haver nada sobre ela no tutorial, ela não estava disponível no momento em que o tutorial foi escrito. Esta é uma função definida pelo usuário, que foi escrita especialmente para você.

      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);
        //----
    }
 
Boa noite! Uma parada para trás funciona imediatamente após o pedido ser feito. E deve funcionar somente quando o pedido com o bilhete tocket passar para a história, e se moverá estritamente na TakeProfit.


//***************************************   
 
  nahodka=false;
 
 
 if (OrderSelect(tocket, SELECT_BY_TICKET , MODE_HISTORY))  
 if (OrderTakeProfit( )-3*Point<profitsell&&OrderTakeProfit( )+3*Point>profitsell) nahodka=true;
     // Находим ордер, сработавший именно по тейкпрофиту 
 
 
  
 if(nahodka){if (OrderSelect(tecket,SELECT_BY_TICKET)){
 if(OrderStopLoss( )>Bid+treylingstop*Point ){ Print ("четвёртаямодифи    " );
 OrderModify(  tecket, OrderOpenPrice(), Bid+treylingstop*Point, OrderTakeProfit(), 0, CLR_NONE);}}}
  // Модифицируем оставшийся ордер
 for ( i = OrdersTotal() - 1; i >= 0; i--)
 

rigonich

Eu o fiz no início. Eu inseri este pedaço de código dentro da função init, compilei-o, recebi uma nota:

Afunção "fGet_MineGV" não é referenciada e será removida do arquivo exp-file

Este aviso é claro para mim porque ainda não há nenhum registro lá, então não pode ler nada, certo?

Depois disso, escrevo a segunda parte do código dentro do início da função. Este fragmento se parece com este

void fSave_MineGV (string fs_PrefName = "") // prefixo do nome da variável
{
datetime ldt_NewBar;
datetime ldaTBeginBar = iTime (Symbol(), 1, 0)
// Salvar no início de cada minuto
se (ldt_NewBar == ldaTeginBar) retornar;
ldt_NewBar = ldaTBeginBar;
//
Salvar os valores de cada variável por sua vez 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);
}

Está tudo bem aqui?

Eu inseri esta parte do código logo após o cálculo de SUA, SUA1, BUA,BUA1.

Mas na compilação, o Expert Advisor dá os seguintes resultados:

27 erro(s), 64 advertência(ões)

 

xant:

rigonich

Eu o fiz no início. Eu inseri este pedaço de código dentro da função init, compilei-o, recebi uma nota:

A função "fGet_MineGV" não é referenciada e será removida do arquivo exp-file

Este aviso é claro para mim porque ainda não há nenhum registro lá, então não pode ler nada, certo?

Depois disso, escrevo a segunda parte do código dentro do início da função. Este fragmento se parece com este

void fSave_MineGV (string fs_PrefName = "") // prefixo do nome da variável
{
datetime ldt_NewBar;
datetime ldaTBeginBar = iTime (Symbol(), 1, 0)
// Salvar no início de cada minuto
se (ldt_NewBar == ldaTeginBar) retornar;
ldt_NewBar = ldaTBeginBar;
//
Salvar os valores de cada variável por sua vez 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);
}

Está tudo correto aqui?


As descrições das funções não podem ser colocadas nem no início, nem no inite, nem em qualquer outra função. Elas devem ser colocadas separadamente. Você pode colocá-las no meio de sua EA, ou no início, ou no final, mas não em outras funções. Você só deve colocar a chamada de função no init, você pode colocá-la logo no início.

Esta observação é clara para mim, porque o registro ainda não foi criado, não pode contar nada, certo? Exatamente, não há descrição da função, que o compilador procura onde ela deve estar - fora das funções pragmáticas.

{

fGet_MineGV();
}

O mesmo se aplica à segunda função. Esta é uma "cartilha", e é difícil supor que alguém fazendo programação, mesmo um iniciante, não possa saber disso.

 
Dimka-novitsek:
Boa noite! A parada de trilha funciona imediatamente após o pedido ser feito. E deve funcionar somente quando o pedido com o bilhete passar para a história, e será movido estritamente pela TakeProfit.

Mas, se seu histórico não estiver vazio, você quase certamente encontrará lá uma ordem acionada exatamente na Take Profit? Aparentemente, você não está procurando no histórico por um pedido fechado na TP, mas está verificando o histórico para descobrir como o pedido precisa ser fechado e se ele foi fechado de alguma forma. Isso é o que você precisa verificar, por que você verifica exatamente qual é o preço de fechamento de seu pedido? Três opções - 1. preço fechado==0 - se a ordem é de mercado, não está no histórico (OrderSelect() retornará falso) 2. preço fechado é igual a
OrderTakeProfit()
-- o pedido foi fechado a preço de parada, 3.
OrderTakeProfit()
-- o pedido não fechou na parada .
 

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.