[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4. - pagina 476

 
Non ce la faccio con questa emulazione di Pause-Break, non funziona!
//+------------------------------------------------------------------+
//|                                                     советник.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 start()
  {
//----

            
            double strela1 = iCustom(NULL, taymfreym, "индикатор", 2, 1);
            double strela2 = iCustom(NULL, taymfreym, "индикатор", 3, 1);
            
            int BUY=0,SELL=0;int ticket; 
            Print (  " strela1 " , strela1 , "   strela2  " , strela2 );BreakPoint();
            
    
            
            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( NULL, 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&&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(); }
 
AA! 2012.10.30 14:07:08 2012.06.05 05:30 EA EURUSD,M30: le chiamate dll non sono permesse; 'user32.dll'-'keybd_event' Penso di aver capito. Come si sblocca la dll?
 
No, sembra a posto!!!
 
I buffer sono sempre 0 nel test !!! Al diavolo, lo testerò sul reale - scriverò un ciclo in avanti di 200 barre all'indietro, e cercherò punti di entrata!
 
Mi scusi, è da mezz'ora che cerco di capire dove sono sbilanciate le mie staffe, o cosa significa questo? Ho messo le stampe ed ecco qui... Non compila, ma giura '\fine_del_programma' - parentesi sinistra sbilanciata C:\Alpari\esperti-cliente.mq4 (94, 1)
 
Ecco, mi dispiace... Ho ricontrollato le staffe otto volte: bene, sono equilibrate! Equilibrato! O lo sono?
//+------------------------------------------------------------------+
//|                                                     советник.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:
Mi dispiace, è mezz'ora che cerco staffe che non sono in equilibrio. Ho appena messo le impronte ed ecco fatto... Non compila, ma giura '\fine_del_programma' - parentesi sinistra sbilanciata C:\Alpari\esperti-cliente.mq4 (94, 1)

a prima vista, manca l'ultima parentesi graffa (per main())

Il tuo codice finisce con una ramificazione

  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 questo è per il codice di cui sopra

 
Grazie!!! Sarà meglio che dia un'occhiata al codice... Ho anche contato le staffe una per una su un pezzo di carta - equilibrato!!!
 
Dov'è la ramificazione? O sono stupido... Abbiamo appena aperto un ordine alle condizioni!
 
drknn:

...

Lei ha un modo complicato di arrivare alla verità. Sono sicuro che se formulate il problema stesso alla gente, vi dirà un modo più semplice per risolverlo.

P.S.

Di tutte le soluzioni a un problema, la più facile è sempre la più difficile da trovare, perché per trovarla bisogna riciclare e setacciare un mucchio di spazzatura. Quindi, sentitevi liberi di formulare - soluzione semplice non significa soluzione rapida. Forse le persone qui ti salveranno più di un giorno della tua vita.


Ok. Cercherò di darvi il succo del problema, forse qualcuno vi darà un suggerimento o mi aiuterà a renderlo più facile da risolvere.

Lavoriamo sul grafico a 1 minuto. Prendiamo la barra di un minuto (high+low/2 - valore medio della barra) sul grafico del 29/10/12 alle 00:00 - questo sarà il punto di partenza.

Poi controlliamo la deviazione da questo prezzo verso l'alto di 10 pip (ogni deviazione corretta è +1).

Quando raggiungiamo la deviazione di 10 punti dal punto di partenza - il contatore +1; e cominciamo a controllare ulteriori deviazioni, ma dal punto, dove abbiamo raggiunto la deviazione di 10 punti, e aspettiamo il prossimo aumento di 10 punti nel prezzo.

Per esempio, otteniamo:

Se (punto di partenza) + 10 pips <= prezzo (usiamo tutti i prezzi successivi delle barre dal punto di partenza.) Otteniamo un contatore = contatore +1; e facciamo partire il punto di partenza già da questo punto -(punto di partenza + 10 pips).

Se (punto di partenza + 10 pi ps) +10 pips <= prezzo (si usano tutti i prezzi successivi delle barre dal punto di riferimento) si ottiene counter=Counter+1; e si parte da questo punto-(punto di partenza + 10 pips) +10 pips.

Se(punto di partenza + 10 pi ps+ 10 pips) + 10 pips <= prezzo (usiamo tutti i prezzi successivi delle barre dal punto di riferimento.) otteniamo counter=Counter+1; e partiamo da questo punto -(punto di partenza + 10 pips+ 10 pips) + 10 pips.

e così via...

Fino a raggiungere un contatore di 10(contatore == 10).

E ogni nuovabarra di 1 minuto formata(high+low/2 - valore medio della barra) controlliamo questa condizione e aspettiamo che il contatore raggiunga10 (counter == 10). Supponiamo che siano passati due giorni, ogni nuova barra formata abbiamo controllato e spostato se le condizioni erano corrette .....

E quando abbiamo raggiunto il contatore =10 - emettiamo il messaggio che "Contatore == 10". Spostiamo il punto di partenza 2 giorni prima del punto iniziale definito dall'utente, cioè dal29/10/12 alle 00:00 al 31/10/12 alle 00:00 e ripetiamo il ciclo.

Ripetere il ciclo e quindi muoversi attraverso il programma.

Cioè dovremmo prendere le barre appena formate e disegnare(high+low/2 - valore medio della barra). Controllate le condizioni e, se sono corrette, spostatele come descritto sopra.

Ho provato a implementarlo attraverso un array, è molto confuso e dà valori sbagliati! Aiutatemi a implementare questo algoritmo!