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

 
Dimka-novitsek:

Obrigado!!! Colocar na normalização... E o que diabos está acontecendo em tudo!!!!!! Minha cabeça está pegando fogo. Parece mais fácil do que a geometria do ensino médio.



Você não precisa de normalização para ASK e BID, você precisa de Sleep(Shh1sec-5secs);
 

Consegui! A questão é esta! Deixe-me ver se entendi... Muito obrigado por sua participação, por sua ajuda. Eu mesmo não entendo. Preste atenção ao código acima. Há uma condição

 if (strela1<strela2&&SELL==0&&BUY!=0
  ){ udalenie ();

Se... e se... e se não há ordens de compra. Quero dizer, há! Eles não são zero. Como você pode ver na captura de tela, o código acaba de começar a funcionar e não há ordens de compra! Bem, não! E a condição é cumprida, embora não deva ser!

Isto pode ser visto a partir da mensagem da impressora na janela do Expert Advisors. A propósito, a ordem foi perfeitamente estabelecida quando a condição foi cumprida, ou seja, foi estabelecida!

Acontece que eu escrevi mal a condição?

Naturalmente, a condição seguinte no código foi acionada,

if (strela1<strela2&&BUY==0&&SELL==0){

que é o que deveria ter sido acionado nestas circunstâncias!

O que está errado!!!?

O que há de errado com a condição lógica?!?

Como diabos é que ambos são executados ao mesmo tempo????

 

Observando, eu não entendo... São duas condições que estão sendo cumpridas de uma só vez!!! Talvez eu seja um idiota... Mas eu não entendo. Isto é ridículo. Acho que eu não sei como escrever um se operador!

Cara, o código inteiro.

//+------------------------------------------------------------------+
//|                                                     советник.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#include <WinUser32.mqh>
  extern double  lot=1;                          
  extern int taymfreym=0 ;                           
  extern double  stoplos=200 ;                          
  extern double  takeprofit=500 ; 
  extern double  magicnumber=350 ;                          


void BreakPoint(){//if (!IsVisualMode()) return(0);
keybd_event(19,0,0,0);
Sleep(10);
keybd_event(19,0,2,0);}

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   Print (   "  НачалоНачал " ); 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int i;
int start()
  {Print (   "  Начало " ); 
//----
for( int A=0; A<100 ; A++){
            
            double strela1 = iCustom(NULL, taymfreym, "индикатор", 2, A);
            double strela2 = iCustom(NULL, taymfreym, "индикатор", 3, A);
            
            int BUY=0,SELL=0;int ticket; 
            Print ( A,  "  strela1 " , strela1 , "    strela2  " , strela2 ); 
            
    
            
            for(int i=1; i<=OrdersTotal(); i++) {  
            if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
        {                                       // Анализ ордеров:
         if (OrderSymbol()!=Symbol( ) )continue;      // Не наш фин. инструм
         if (OrderMagicNumber( ) !=magicnumber)continue;
         if (OrderType()==0){ BUY++; ticket=OrderTicket( );Print( "BUY++   " , BUY  ,"  ticket ",ticket);}
         if (OrderType()==1) {SELL++;ticket=OrderTicket( );Print( "SELL++   " , SELL  ,"  ticket ",ticket);}    } }
         
  
  if (strela1<strela2&&SELL==0&&BUY!=0
  ){ udalenie ();
              
   OrderSend(Symbol( ), OP_BUY, lot,NormalizeDouble(Ask, Digits), 3*Point, NormalizeDouble( Bid- (stoplos*Point),Digits),   NormalizeDouble( Ask+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE);           
      Print( "strela1<strela2&&BUY==0&&SELL!=0 " , GetLastError()); }
            
  if (strela1>strela2){ udalenie ();
                
   OrderSend(Symbol( ), OP_SELL, lot,NormalizeDouble( Bid, Digits), 3*Point, NormalizeDouble( Ask+ (stoplos*Point),Digits),   NormalizeDouble( Ask-( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE) ; 
        Print( "strela1>strela2&&SELL==0&&BUY!=0 " , GetLastError()); }
      
    if (strela1<strela2&&BUY==0&&SELL==0){    
            
           OrderSend( Symbol( ), OP_BUY, lot, NormalizeDouble(Ask, Digits), 3*Point, NormalizeDouble( Bid- (stoplos*Point),Digits),   NormalizeDouble( Ask+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE);  
            Print( "strela1>strela2&&BUY==0&&SELL==0   " , GetLastError()  ,"  Ask ",Ask,"   stoplos= NormalizeDouble( Bid- (stoplos*Point),Digits)  ",
 NormalizeDouble( Bid- (stoplos*Point),Digits),"    takeprofit= NormalizeDouble( Ask+( takeprofit*Point),Digits) ", NormalizeDouble( Ask+( takeprofit*Point),Digits)); }
           
   if (strela1>strela2&&BUY==0&&SELL==0){  
   
            OrderSend( Symbol( ), OP_SELL, lot,NormalizeDouble( Bid, Digits), 3*Point, NormalizeDouble( Ask+ (stoplos*Point),Digits),   NormalizeDouble( Ask-( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE) ; 
            Print( "strela1>strela2&& OP_SELL  " , GetLastError()   ,"  Bid ",Bid,"    stoplos=   NormalizeDouble( Ask- (stoplos*Point),Digits)  ",
 NormalizeDouble( Ask- (stoplos*Point),Digits),"    takeprofit= NormalizeDouble( Bid+( takeprofit*Point),Digits) ", NormalizeDouble(Ask+( takeprofit*Point),Digits));
            Print( "strela1>strela2&& OP_SELL   " , GetLastError()  ," (stoplos*Point) ",(stoplos*Point),"   Point  ", Point,"   Digits  ", Digits); }
               
    
   
   
     } Print (   "  Конец " ); BreakPoint();     
//----
   return(0);
  }
//+------------------------------------------------------------------+

void udalenie (){ int total = OrdersTotal();
  for(i=total-1;i>=0;i--)
    {
    OrderSelect(i, SELECT_BY_POS);
   int type   = OrderType();  bool result = false;
    switch(type)
          { 
          case OP_BUY       : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 3*Point, CLR_NONE ); break;
          case OP_SELL      : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 3*Point, CLR_NONE ); break; 
          }
    if(!result)
      {
      int error =  GetLastError(); 
      string errorcomment = "Неудалось закрыть ордер №" + OrderTicket() + " " + Symbol() + " " + OrderType() + " " + error; 
      Print(errorcomment);
      }  
    }       
   }

Explicação, só para facilitar... A seleção de pedidos padrão, como eu a vejo. Pedidos em aberto separados são lidos em variáveis BUY++, SELL+++.

Em seguida, estas variáveis estão envolvidas em condições lógicas. O resto não parece ser de nenhuma importância, embora quem saiba.

Na verdade, é claro o que vi nas gravuras.

 
aedu:
Fiz o download de um EA para trabalho em "um clique", compilado - sem erros, mas exceto "face" no canto não mostra nada. Ajuda !!!!!!!!!!!!!
McTrader_"+Symbol()+"_command.dat", acho que ele precisa de algo como um script com comandos para a EA. Ela não a cria por si só. Portanto, favor entrar em contato com o desenvolvedor para explicações.
 
Dimka-novitsek:

Observando, eu não entendo... São duas condições que estão sendo cumpridas de uma só vez!!! Talvez eu seja um idiota... Mas eu não entendo. Isto é ridículo. Acho que eu não sei como escrever um se operador!

Cara, o código inteiro.

Explicação, só para facilitar... A seleção de pedidos padrão, como eu a vejo. Vender separadamente pedidos abertos em variáveis BUY++, SELL++.

Em seguida, estas variáveis estão envolvidas em condições lógicas. O resto não parece ser de nenhuma importância, embora quem saiba.

Na verdade, é claro o que vi nas gravuras.

você pode me dar um "indicador"?

embora não

 

Qual é o problema, por que ele está ficando tão nervoso?
 
Dimka-novitsek:

Observando, eu não entendo... São duas condições que estão sendo cumpridas de uma só vez!!! Talvez eu seja um idiota... Mas eu não entendo. Isso é ridículo. Acho que eu não sei como escrever um se operador!

Cara, o código inteiro.

Explicação, só para facilitar... A seleção de pedidos padrão, como eu a vejo. Pedidos em aberto separados são lidos em variáveis BUY++, SELL+++.

Em seguida, estas variáveis estão envolvidas em condições lógicas. O resto não parece ser de nenhuma importância, embora quem saiba.

Na verdade, é claro o que vi nas gravuras.

Muitos erros lógicos e técnicos. A lógica de abrir ordens não é rastreável (eu tive que usar minha imaginação). Você precisa aprender sozinho, escolhendo seu próprio código desleixado (até "endireitar") OU estudar os códigos de outras pessoas. Eu fiz seu código para você. - Será que isso o ajudará?

P.S. Como eu disse antes, você não precisa normalizar os preços para um testador. Mas uma das possíveis razões para o erro "Preço errado" ao executar uma ordem de comércio pode ser o Slippage, que você tem 3 * Ponto (quando convertido em int) = 0.

Arquivos anexados:
rcjipewc.mq4  6 kb
 
Obrigado!!!!!
 
san44es:

Pessoal, uma palavra de conselho!

Há uma função personalizada que conta o preço baixo da 5ª barra de tempo de fundo, como faço para que conte o preço de um período de tempo específico?

iLow
 

Obrigado! O código agora é mais simples. Certamente mais simples.

Obrigado pelo Slippage!

O laço para (int A = 0; A <100 ; A+++) // não precisamos desta busca de barras, apenas me ajuda a ver pelo registro que a EA fez pedidos exatamente onde estão as setas ou onde está o número do erro. A questão é que não houve sinais no testador. Vi nas mesmas impressões que as variáveis seta1 e seta2 eram apenas zero em todas as barras e foi assim que consegui sair da situação.

O ciclo pode, naturalmente, ser contado em qualquer direção. Mas novamente vejo erro 129 em todos os lugares! Vejo as setas do indicador no gráfico e quero ter certeza de que as encomendas foram feitas por eles. Então, em uma captura de tela nas variáveis iniciais as setas 1 e 2 são iguais, mais adiante em 17 barras a partir de zero, a ordem é definida - okey, super! Depois, as mensagens da impressora de que há uma venda com um sinal mais ou menos, e as setas em outras barras são iguais - great!!!!