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

 

Grazie! Il codice è più semplice ora. Certamente più semplice.

Grazie per lo Slippage!

Il ciclo for (int A = 0; A <100 ; A++) // non abbiamo bisogno di questa ricerca di barre, mi aiuta solo a vedere dal log che l'EA ha piazzato ordini esattamente dove sono le frecce o dove è il numero di errore. Il punto è che non c'erano segnali nel tester. Ho visto sulle stesse stampe che le variabili arrow1 e arrow2 erano solo zero su tutte le barre ed è così che sono uscito dalla situazione.

Il ciclo può ovviamente essere contato in entrambe le direzioni. Ma di nuovo vedo l'errore 129 ovunque! Vedo le frecce dell'indicatore nel grafico e voglio assicurarmi che gli ordini siano stati piazzati da loro. Così, su una schermata all'inizio le variabili freccia 1e2 sono uguali, più avanti su 17 barre da zero, l'ordine è impostato - okey, super! Poi i messaggi della stampante che c'è una vendita con così e così tick, e le frecce sulle barre successive sono uguali - grande!!!!

 
Poi devi cancellare una vendita sulla freccia rossa e piazzare un acquisto. Improvvisamente due ordini sono stati cancellati!!! Due ordini, quello chiaramente impostato e un altro che non sembrava esserci!!! Va bene, al diavolo... Viene fuori l'errore 129 e non c'è nessun ordine. Mi dispiace se ho sconcertato tutti i buoni aiutanti volontari in questo modo.
 
//+------------------------------------------------------------------+
//|                                                     советник.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 int     magicnumber = 350;
  extern int     ControlBar  = 1;      // номер бара на котором снимаем показания индикатора                     


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),
               strela2 = iCustom (NULL, taymfreym, "индикатор", 3, A);
        int BUY = 0, SELL = 0, ticket; 
        Print (A, "  strela1 " , strela1 , "    strela2  " , strela2);
    
    for (int i = OrdersTotal() - 1; i >= 0; i--)
    {  
        if (!OrderSelect (i - 1, SELECT_BY_POS)) continue;  // Если есть следующий
        if (OrderSymbol() != Symbol()) continue;      // Не наш фин. инструм
        if (OrderMagicNumber() != magicnumber) continue;
        int type = OrderType();
        if (type > 1) continue;
        ticket = OrderTicket();
        if (type == 0) {BUY++; Print ("BUY++   " , BUY  ,"  ticket ", ticket); break;}
        if (type == 1) {SELL++; Print ("SELL++   " , SELL  ,"  ticket ", ticket); break;}
    }
    if (strela1 < strela2)
    {
        if (SELL > 0) udalenie (OP_SELL);
        if (BUY == 0)
        {
            OrderSend (Symbol( ), OP_BUY, lot,NormalizeDouble(Ask, Digits), 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,"   stoplos= NormalizeDouble( Bid- (stoplos*Point),Digits)  ",
            NormalizeDouble ( Bid- (stoplos*Point),Digits),"    takeprofit= NormalizeDouble( Ask+( takeprofit*Point),Digits) ", NormalizeDouble( Ask+( takeprofit*Point),Digits));
        }
    }
    else if (strela1 > strela2)
    {
        if (BUY > 0) udalenie (OP_BUY);
        if (SELL == 0)
        {
            OrderSend (Symbol( ), OP_SELL, lot, NormalizeDouble (Bid, Digits), 3, 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);
        }
    }
    }
    BreakPoint();     
//----
    return (0);
}
//+------------------------------------------------------------------+

void udalenie (int Type = -1)
{
    int total = OrdersTotal();
    for (i = total - 1; i >= 0; i--)
    {
        if (!OrderSelect (i, SELECT_BY_POS)) continue;
        if (OrderSymbol() != Symbol()) continue;      // Не наш фин. инструм
        if (OrderMagicNumber( ) != magicnumber) continue;
        int type = OrderType();
        if (type > 1) continue;
        if (Type > -1) if (Type != type) continue;
        bool result = false;
        switch (type)
        { 
            case OP_BUY       : result = OrderClose (OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 3, CLR_NONE ); break;
            case OP_SELL      : result = OrderClose (OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 3, CLR_NONE ); break; 
        }
        if (!result)
        {
            int error =  GetLastError(); 
            string errorcomment = "Неудалось закрыть ордер №" + OrderTicket() + " " + Symbol() + " " + OrderType() + " " + error; 
            Print (errorcomment);
        }  
    }       
}
 
Aspetti, mi scusi, metto le sottovesti dappertutto!
 
Dimka-novitsek:
Poi devi cancellare una vendita sulla freccia rossa e piazzare un acquisto. Improvvisamente due ordini sono stati cancellati!!! Due ordini, quello chiaramente impostato e un altro che non sembrava esserci!!! Va bene, al diavolo... Viene fuori l'errore 129 e non c'è nessun ordine. Mi perdonerai per aver sconcertato tutti i bravi aiutanti volontari...

Dimka - dammi il tuo codice nel mio messaggio personale - farò casino - non ho niente da fare mentre il mio"graal" viene testato ... e il mio cervello ha bisogno di un allenamento... E non dimenticare l'indulgenza...
 

Ciao a tutti, sono un novellino, quindi per favore non cacciatemi selvaggiamente. Si sono accumulate alcune domande.

1) Dove posso scaricare lo storico completo delle citazioni. Ho capito che nel terminale MT4 le quotazioni di MetaQuotes vengono scaricate di default ma c'è un vuoto da gennaio 2012 a ottobre 2012 e non viene chiuso quando si riscarica. Questo mette in discussione tutta la storia a partire da lì.

2) La storia ha date precedenti al 1999, i dati per loro alcuni strani, molto pochi, anche da minuti. Qualcuno li prende in considerazione o li cancella.

3) E qualche altra sciocchezza sta succedendo con il test. Ho deciso di provare a scrivere un semplice Expert Advisor: Compra quando Open[1]<MA1 && Close[1]>MA1. Durante i test, il MA (esponenziale) mostra sempre valori diversi a seconda della data iniziale del test. Più lungo è il periodo МА (per esempio 1000-1200) più grande è l'errore, qual è il problema?

 
Dimka-novitsek:

Grazie! Il codice è più semplice ora. Certamente più semplice.

Grazie per lo Slippage!

Il ciclo for (int A = 0; A <100 ; A++) // non abbiamo bisogno di questa ricerca di barre, mi aiuta solo a vedere dal log che l'EA ha piazzato ordini esattamente dove sono le frecce o dove è il numero di errore. Il punto è che non c'erano segnali nel tester. Ho visto sulle stesse stampe che le variabili arrow1 e arrow2 erano solo zero su tutte le barre ed è così che sono uscito dalla situazione.

Il ciclo può ovviamente essere contato in entrambe le direzioni. Ma di nuovo vedo l'errore 129 ovunque! Vedo le frecce dell'indicatore nel grafico e voglio assicurarmi che gli ordini siano stati piazzati da loro. Così, su una schermata all'inizio le variabili freccia 1e2 sono uguali, più avanti su 17 barre da zero, l'ordine è impostato - okey, super! Poi i messaggi della stampante che c'è una vendita con così e così tick, e le frecce sulle barre successive sono uguali - grande!!!!

Sul ciclo:

for (int A = 0; A <100 ; A++)

Prima di fare qualcosa (scrivere codice), è necessario avere un'idea chiara di ciò che si vuole ottenere. Hai questo indicatore su ogni tick, e puoi avere un layout completo delle sue letture. In questo modo (loop) avrete in uscita nelle variabili strela1 e strela2 le letture alla 100a barra e potrete fare trading in base a queste letture (ultimo inverno)... :))) non ho prestato attenzione subito - hai incluso le operazioni di trading nel ciclo delle letture degli indicatori - un P... Naturalmente, tu lo sai meglio di me. :)))

 
No, ho bisogno del ciclo per vedere l'entrata/uscita, cioè per testare il robot. Come piazza gli ordini, come fa gli errori. Beh, non viene testato nel tester...
 
Dimka-novitsek:
No, ho bisogno del ciclo per vedere l'entrata/uscita, cioè per testare il robot. Come piazza gli ordini, come fa gli errori. Non viene testato nel tester...

Cosa posso dire - GENIALE... Buona fortuna!

P.S. Nel mio codice ho trovato un piccolo errore in relazione al cambiamento di direzione dell'enumerazione degli ordini, anche ridotto il codice, così come fatto un tentativo di creare l'ottimizzabilità nel tester (controllate voi stessi).
E ho il sospetto che tu non legga correttamente i dati dell'indicatore. L'indicatore ha diversi buffer (4 nella mia versione). Alcuni, come quelli che disegnano frecce - hanno un valore SOLO dove si trova la freccia. Per cercare i segnali in tali buffer, è necessario organizzare un ciclo (while()) con una condizione che il valore di ritorno non sia uguale (nella mia variante EMPTY_VALUE) a un valore "vuoto". Dove non ci sono "frecce" (in questi buffer), il segnale deve essere cercato confrontando il valore di ritorno con il prezzo.

File:
lxvhlxyx.mq4  5 kb
 

Buon giorno o notte! Una domanda per gli sviluppatori di mt4 e per tutti gli altri.

Quali sono i requisiti minimi di sistema per il client MT?

Voglio eseguirlo sul mio vecchio hardware: Athlon 800mg, 512mb, XP SP3. Quando eseguo MT 4 o 5, si spegne dopo 2 secondi. Il problema non è chiaramente nel windup o nell'hardware, questo hardware esegue Visual Studio con debugger (io stesso sono un programmatore), e l'eccezione non si presenta nel sistema (poiché il mio debugger non funziona). Immagino che al cliente stesso non piaccia qualcosa e si chiude di conseguenza. Quindi la domanda, qual è la ragione e cosa non piace a mt, davvero la frequenza della CPU? ))

Motivazione: