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

 
AA! 2012.10.30 14:07:08 2012.06.05 05 05:30 EA EURUSD,M30: chamadas dll não são permitidas; 'user32.dll'-'keybd_event' eu acho que descobri. Como eu desbloqueio a dll?
 
Não, parece ótimo!!!
 
Os tampões estão sempre 0 no teste!!! Para o inferno com isso, vou testá-lo no real - vou escrever um ciclo de 200 barras para a frente, para trás, e procurar pontos de entrada!
 
Desculpe-me, estou procurando há meia hora para descobrir onde meus parênteses estão fora de equilíbrio, ou qual é o significado disso? Coloquei as impressoras e aqui vamos nós... Ele não compila, mas jura "fim_de_programa" - parêntese esquerda desequilibrada C:Alpari`experts\customer.mq4 (94, 1)
 
Aqui, sinto muito... Eu verifiquei novamente os parênteses oito vezes - bem, eles estão equilibrados! Equilibrado! Ou são eles?
//+------------------------------------------------------------------+
//|                                                     советник.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=20 ;                          
  extern double  takeprofit=50 ; 
  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 (   "  init " ); 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
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( );}
         if (OrderType()==1) {SELL++;ticket=OrderTicket( );}    } }
         
   if (strela1>strela2&&BUY==0&&SELL==0)    {    
            
           OrderSend( Symbol( ), OP_BUY, lot, Ask, 3, 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,
     "   NormalizeDouble( Bid- (stoplos*Point),Digits)  ", NormalizeDouble( Bid- (stoplos*Point),Digits),"  
         NormalizeDouble( Ask+( takeprofit*Point),Digits) ", NormalizeDouble( Ask+( takeprofit*Point),Digits)); }
           
   if (strela1<strela2&&BUY==0&&SELL==0){  
   
            OrderSend( Symbol( ), OP_SELL, lot, Bid, 3, NormalizeDouble( Ask- (stoplos*Point),Digits),  
           NormalizeDouble( Bid+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE) ; 
            Print( "strela1<strela2&&BUY==0&&SELL==   " , GetLastError()  ,"  Bid ",Bid,
   "   NormalizeDouble( Ask- (stoplos*Point),Digits)  ", NormalizeDouble( Ask- (stoplos*Point),Digits),
  "    NormalizeDouble( Bid+( takeprofit*Point),Digits) ", NormalizeDouble( Bid+( takeprofit*Point),Digits); }
            
 
   if (strela1>strela2&&BUY==0&&SELL!=0){ 

         OrderSelect(ticket, SELECT_BY_TICKET);
       OrderClose(  ticket , OrderLots( ) , OrderOpenPrice( ) , 3, CLR_NONE);                 
       OrderSend(Symbol( ), OP_BUY, lot, Ask, 3, NormalizeDouble( Bid- (stoplos*Point),Digits), 
       NormalizeDouble( Ask+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE);           
       Print( "strela1>strela2&&BUY==0&&SELL!=0 " , GetLastError());BreakPoint(); }
            

  if (strela1<strela2&&SELL==0&&BUY!=0){ 
   OrderSelect(ticket, SELECT_BY_TICKET);
   OrderClose(  ticket , OrderLots( ) , OrderOpenPrice( ) , 3, CLR_NONE);                 
   OrderSend(Symbol( ), OP_SELL, lot, Bid, 3, NormalizeDouble( Ask- (stoplos*Point),Digits),  
 NormalizeDouble( Bid+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE) ; 
        Print( "strela1<strela2&&SELL==0&&BUY!=0 " , GetLastError());BreakPoint(); }
      
      
            
     } Print (   "  Конец " );      
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
Dimka-novitsek:
Desculpe, estou procurando há meia hora por parênteses que estão fora de equilíbrio. Acabei de colocar as impressões digitais e pronto... Ele não compila, mas jura "fim_de_programa" - parêntese esquerda desequilibrada C:Alpari`experts\customer.mq4 (94, 1)

à primeira vista, falta o último parêntese (para principal())

Seu código termina com uma ramificação

  if (strela1<strela2&&BUY==0&&SELL==0){  
   
            OrderSend( NULL, OP_SELL, lot, Bid, 3, NormalizeDouble( Ask- (stoplos*Point),Digits),  
 NormalizeDouble( Bid+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE) ; 
            Print( "strela1<strela2&&BUY==0&&SELL==   " , GetLastError());BreakPoint(); }

ps isto é para o código acima

 
Obrigado!!! É melhor eu dar uma olhada no código... Também contei os parênteses um a um em um pedaço de papel - equilibrado!!!
 
Onde está a ramificação? Ou eu sou estúpido... Quer dizer, nós apenas abrimos uma ordem sob as condições!
 
drknn:

...

Você tem uma maneira complicada de chegar à verdade. Tenho certeza de que se você formular o problema em si para o povo, ele lhe dirá uma maneira mais simples de resolvê-lo.

P.S.

De todas as soluções para um problema, a mais fácil é sempre a mais difícil de encontrar, pois para encontrá-lo é preciso reciclar e peneirar um monte de sucata. Portanto, sinta-se à vontade para formular - solução simples não significa solução rápida. Talvez as pessoas aqui o salvem mais de um dia de sua vida.


Ok. Tentarei dar-lhe a essência do problema, talvez alguém lhe dê uma dica ou me ajude a torná-lo mais fácil de resolver.

Trabalhamos com o gráfico de 1 minuto. Tomamos a barra de um minuto (alto+baixo/2 - valor médio da barra) no gráfico de 29/10/12 às 00:00 - este será o ponto de partida.

Depois verificamos o desvio deste preço para cima em 10 pips (cada desvio correto é +1).

Quando atingimos o desvio de 10 pontos do ponto de partida - o contador +1; e começamos a verificar outros desvios, mas a partir do ponto, onde atingimos o desvio de 10 pontos, e esperamos pelo próximo aumento de 10 pontos no preço.

Por exemplo, nós conseguimos:

Se (ponto inicial) + 10 pips <= preço (usamos todos os preços subseqüentes de barras a partir do ponto inicial.) Recebemos um contador = contador +1; e iniciamos o ponto inicial já a partir deste ponto -(ponto inicial + 10 pips).

Se (ponto inicial + 10 pips) +10 pips <= preço (todos os preços subsequentes de barras do ponto de referência são usados) obtemos counter=Counter+1; e partimos deste ponto-(ponto inicial + 10 pips) +10 pips.

Se(ponto inicial + 10 pips+10 p ips) + 10 pips <= preço (usamos todos os preços subseqüentes de barras a partir do ponto de referência.) obtemos counter=Counter+1; e partimos deste ponto -(ponto inicial + 10 pips+ 10pips) + 10 pips.

e assim por diante...

Até chegarmos a um contador de 10(contador == 10).

E a cada novabarra formadade 1 minuto (alto+baixo/2 - valor médio da barra) verificamos esta condição e esperamos até que o contador chegue a10 (contador == 10). Suponha que dois dias se passaram, cada nova barra formada nós verificamos e alteramos se as condições estavam corretas .....

E quando chegamos ao contador =10 - emitimos a mensagem de que "Contador == 10". Estabelecemos o ponto de partida 2 dias à frente do original definido pelo usuário, ou seja, de29/10/12 às 00:00 a 31/10/12 às 00:00 e repetimos o ciclo.

Repita o ciclo e assim se mova através do cronograma.

Ou seja, devemos pegar as barras recém-formadas e sacar(alto+baixo/2 - valor médio da barra). E verifique as condições e, se elas estiverem corretas, altere-as conforme descrito acima.

Eu tentei implementá-lo através de uma matriz, é muito confuso e dá valores errados! Ajude-me como implementar este algoritmo!

 
Dimka-novitsek:
Aqui, sinto muito... Eu verifiquei novamente os parênteses oito vezes... bem, eles estão equilibrados! Equilibrado! Ou são eles?


Neste código:

            Print(
          "strela1>strela2&&BUY==0&&SELL==0   " , GetLastError()  ,"  Ask ",Ask,
     "   NormalizeDouble( Bid- (stoplos*Point),Digits)  ", NormalizeDouble( Bid- (stoplos*Point),Digits),"  
         NormalizeDouble( Ask+( takeprofit*Point),Digits) ", NormalizeDouble( Ask+( takeprofit*Point),Digits)); }

mover as vírgulas invertidas (as que estão no final da linha).