[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 47

 

Caros especialistas do fórum, que também costumavam entender quase nada.

Estou tentando escrever um simples Expert Advisor que usa o indicador Parabolic Sar como uma ferramenta de treinamento. Sua ação deve ser elementar: se o preço estava abaixo do valor Sar e depois ficou mais alto, então devemos comprar exatamente no momento em que o preço cruza o indicador e exatamente uma vez com a definição de stop loss e ter lucro de 10 pontos. E se for vice versa, então vender.

O problema é que ele sempre compra e vende, mas o faz enquanto há dinheiro gratuito no depósito, não uma única vez. Em outras palavras, assim que o preço sobe acima do nível de Sar, ele está continuamente comprando até o preço ser mais alto, e assim que o preço está abaixo de Sar, ele está vendendo o tempo todo até que o preço esteja abaixo do nível de Sar.

Na verdade, a questão é: como fazer nossa EA fazer apenas um acordo quando estas condições aparecem, e não um conjunto infinito delas?

Aqui está o código do meu Conselheiro Especialista.

//+------------------------------------------------------------------+
//|                                    Current_sar_value_summary.mq4 |
//|                                         Орлов Денис Владимирович |
//|                                                 orlovkem@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Орлов Денис Владимирович"
#property link      "orlovkem@mail.ru"

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
                     //объявляем переменные
   double _sar_value; //текущий уровень Сар
   double _price;       //текущий уровень цены
   int _ticket;      //возвращает количество открытых позиций
   
   _sar_value=iSAR(0,0,0.02,0.2,0);//приравнял переменную _sar_value к текущему значению индикатора Сар
   _price=Bid;                      //приравнял переменную _price к текущему уровню цены Бид
   
   //описываем условие покупки: если уровень цены был ниже значения сар
   if(_price<_sar_value)
           {
           if(_price>=_sar_value)// а потом стал выше, то покупаем
                {
                   Alert("Надо покупать");
                   _ticket=OrderSend(Symbol(),OP_BUY,1,Ask,1,Bid-10*Point,Ask+10*Point,NULL,0,0,Red);
                     
                          Print("OrderSend failed with error #",GetLastError());
                           return(0);
                 
                }
                 return(0);
           }
 
         
   if(_price>_sar_value)//описываем условие покупки: если уровень цены был выше значения сар
         {
           if(_price<=_sar_value)// а потом стал ниже, то продаем
            {
                   Alert("Надо продавать");
                   _ticket=OrderSend(Symbol(),OP_SELL,1,Bid,1,Ask+10*Point,Bid-10*Point,NULL,0,0,Red);
                     
                          Print("OrderSend failed with error #",GetLastError());
                           return(0);
                   
            }
            return(0);
            
         }
   
//----
   return(0);
  }
//+------------------------------------------------------------------+

Quero pedir-lhe que ajude a descobrir, prometo que quando me tornar um guru, não vou ignorar os pedidos de pessoas como eu.

Cumprimentos, Denis Orlov.

 
orlovkem >> :

Caros especialistas do fórum, que também costumavam entender quase nada.

Estou tentando escrever um simples Expert Advisor que usa o indicador Parabolic Sar como uma ferramenta de treinamento. Sua ação deve ser elementar: se o preço estava abaixo do valor Sar e depois ficou mais alto, então devemos comprar exatamente no momento em que o preço cruza o indicador e exatamente uma vez com a definição de stop loss e ter lucro de 10 pontos. E se for vice versa, então vender.

O problema é que ele sempre compra e vende, mas o faz enquanto há dinheiro gratuito no depósito, não uma única vez. Em outras palavras, assim que o preço sobe acima do nível de Sar, ele está continuamente comprando até o preço ser mais alto, e assim que o preço está abaixo de Sar, ele está vendendo o tempo todo até que o preço esteja abaixo do nível de Sar.

Na verdade, a questão é: como fazer nossa EA fazer apenas um acordo quando estas condições aparecem, e não um conjunto infinito delas?

Aqui está o código do meu Conselheiro Especialista.

Quero pedir a sua ajuda. Prometo que quando me tornar um guru, não vou ignorar os pedidos de outros bonecos como eu.

Atenciosamente, Denis Orlov.

Onde você mantém o valor preditivo do indicador? (em que variável...?) a mesma coisa com o valor do preço

double _sar_value; //текущий уровень Сар
   double _price;       //текущий уровень цены

 
lascu.roman >> :

e onde você tem o valor anterior do indicador? (em que variável...?) o mesmo com o valor do preço

A questão é que o valor do indicador anterior está na vela anterior e o preço cruza o valor do indicador na vela atual.

É o mesmo com o preço, o que significa "valor do preço anterior", o preço do tick anterior? ou o fechamento da vela anterior, mas não é isso.

Entendo que tenho que acrescentar algo, mas o que exatamente não consigo entender. Por favor, ajude-me, esta é minha primeira experiência.

>> Respeitosamente, Orlov Denis.

 
orlovkem >> :

A questão é que o valor do indicador anterior está na vela anterior e o preço cruza o valor do indicador na vela atual.

É o mesmo com o preço, o que significa "valor do preço anterior", o preço do tick anterior? ou o fechamento da vela anterior, mas não é isso.

Entendo que tenho que acrescentar algo, mas o que exatamente não consigo entender. Ajude, por favor, esta é minha primeira experiência.

Atenciosamente, Orlov Denis.

Você entendeu o que você disse, então? Você está verificando o valor em um determinado momento.

 if(_price<_sar_value)
           {
           if(_price>=_sar_value)// а потом стал выше, то покупаем

Duas condições mutuamente exclusivas. Quando ele então se tornou mais alto?

 
Roger >> :

Você entendeu o que você disse, então? Você está verificando o valor em um determinado momento.

Duas condições mutuamente exclusivas. Quando foi que ficou mais alto?

 if(_price<_sar_value)
           {
           if(_price>=_sar_value)// а потом стал выше, то покупаем

Talvez eu tenha formulado o comentário errado, mas a essência ainda é verdadeira, o nível de preço tornou-se superior ao valor do indicador, você tem que comprar e ele compra, mas você tem que fazer isso uma vez, e o EA compra enquanto houver dinheiro no depósito. Você só precisa limitar o número de acordos. Não fazer mais de um de cada vez, isso é o que não está funcionando.

 
xruss >> :

mas se havia uma ordem de venda na história e então o Assessor Especialista a fechou (no tipo de história, ele (seu fechamento) é mostrado como t/p ou s/l - será ele considerado como o último?

Se um pedido (compra ou venda) foi fechado por último (o Expert Advisor o fechou, ou acionou t/p ou s/l) e passa sob as condições de

if(OrderSymbol()==Symbol()){
if(OrderMagicNumber()==MagicNumber){

então, será considerado por último. Que efeito particular você não pode alcançar?
 
Everlost >> :

Se um pedido (compra ou venda) foi fechado por último (Expert Advisor fechou-o, ou t/p ou s/l foi acionado) e passa as condições

if(OrderSymbol()==Symbol()){
if(OrderMagicNumber()==MagicNumber){

então, de acordo com isso, será considerado como o último. E qual é exatamente o efeito que você não pode alcançar?

Sim, é provavelmente porque excluí OrderMagicNumber() do código

Quero evitar reabrir as ordens depois de fechadas. Quero fazer com que minhas ordens não reabram após o fechamento (às vezes acontece que ainda existem condições para reabrir). A mesma história com a venda. Pensei que seria legal declarar em minhas condições se eu tivesse uma posição de Compra e tivesse lucro - não reabrir posição de Compra).

((

 
xruss писал(а) >>

Sim, isso é provavelmente porque excluí OrderMagicNumber() do código

Quero fazer com que as ordens não sejam reabertas após o fechamento. Eu pensei que seria legal se eu especificasse nas condições, se eu tivesse uma posição Buy e tivesse um lucro - não para reabrir a Buy novamente. Mas ainda assim ela abre - bastardo!)))

((

A maneira mais fácil de controlar o número de pedidos abertos ao mesmo tempo

if(OrdersTotal()<1){

   .................
   .................
   условия установки ордеров 

}
 
goldtrader >> :

Leia a descrição de OrderSend( ... ).

O número mágico (magik) é atribuído a um pedido quando ele é enviado ao servidor.

Isto é usado principalmente para identificar ordens/posições pendentes.

Isto é, para que a EA não toque em ordens "alienígenas". Isto é feito por um EA ou por um roteiro.

O Mágico não pode ser ajustado manualmente. Você mesmo estabelece as regras no EA/Script.

O mágico é normalmente estático, mas pode ser dinâmico se necessário.

Olhe alguns exemplos simples da Kodobase, e isso deve ficar claro para você.

Por que você não consegue identificar "seus" pedidos pelo número do bilhete? Eles são únicos, não importa quantos Expert Advisors estejam em funcionamento.

Por exemplo, um EA abre um pedido, lembra-se do bilhete, fecha-o e esquece-o.

 
mukata >> :

Por que você não consegue identificar "seus" pedidos pelo número do bilhete? Eles são únicos, não importa quantos Expert Advisors estejam em funcionamento.

Por exemplo, um EA abre um pedido, lembra-se do bilhete e o esquece, depois o fecha.

Chubais cortará a eletricidade e depois descobrirá onde estão os outros e onde estão.
Razão: