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

 
E c'è qualcosa che non va con gli oppiatori se!!!
 
Dimka-novitsek:

Grazie!!! Metti la normalizzazione... E dannazione, cosa diavolo sta succedendo in tutto !!!!!! Ho la testa in fiamme. Sembra più facile della geometria del liceo.



Non hai bisogno di normalizzazione per ASK e BID, hai bisogno di Sleep(Shh1sec-5secs);
 

Capito! Ecco il punto! Fatemi capire bene... Grazie mille per la vostra partecipazione, per il vostro aiuto. Io stesso non lo capisco, fate attenzione al codice qui sopra. C'è una condizione

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

Se... e se... e se non ci sono ordini di acquisto. Cioè, ci sono! Non sono zero. Come potete vedere nello screenshot, il codice ha appena iniziato a funzionare e non ci sono ordini di acquisto! Beh, no! E la condizione è soddisfatta, anche se non dovrebbe esserlo!

Questo può essere visto dal messaggio della stampante nella finestra Expert Advisors. A proposito, l'ordine è stato perfettamente impostato quando la condizione è stata soddisfatta, cioè, è stato impostato!

Si scopre che ho sbagliato a scrivere la condizione?

Naturalmente, la condizione successiva nel codice è stata attivata,

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

che è quello che avrebbe dovuto essere attivato in queste circostanze!

Cosa c'è che non va!!!?

Cosa c'è di sbagliato nella condizione logica?!?

Come diavolo è possibile che vengano giustiziati entrambi contemporaneamente?

 

Guardare, non capisco... Sono due condizioni soddisfatte contemporaneamente!!! Forse sono un idiota... Ma non capisco. Questo è ridicolo. Credo di non saper scrivere un operatore if!

Amico, l'intero codice.

//+------------------------------------------------------------------+
//|                                                     советник.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);
      }  
    }       
   }

Spiegazione, solo per rendere tutto più facile... La raccolta dell'ordine standard, per come la vedo io. Gli ordini aperti separati vengono letti nelle variabili BUY++, SELL++.

Poi queste variabili sono coinvolte in condizioni logiche. Il resto non sembra essere di alcuna importanza, anche se chi lo sa.

In realtà, è chiaro quello che ho visto nelle stampe.

 
aedu:
Ho scaricato un EA per il lavoro in "un clic", compilato - nessun errore, ma tranne "faccia" in un angolo non mostra nulla. Aiuto !!!!!!!!!!!!!
McTrader_"+Symbol()+"_command.dat", penso che abbia bisogno di qualcosa come uno script con comandi per l'EA. Non lo crea da solo. Pertanto, si prega di contattare lo sviluppatore per spiegazioni.
 
Dimka-novitsek:

Guardare, non capisco... Sono due condizioni soddisfatte contemporaneamente!!! Forse sono un idiota... Ma non capisco. Questo è ridicolo. Credo di non saper scrivere un operatore if!

Amico, l'intero codice.

Spiegazione, solo per renderla più facile... La raccolta dell'ordine standard, per come la vedo io. Gli ordini aperti separati vengono letti nelle variabili BUY++, SELL++.

Poi queste variabili sono coinvolte in condizioni logiche. Il resto non sembra essere di alcuna importanza, anche se chi lo sa.

In realtà, è chiaro quello che ho visto nelle stampe.

puoi darmi un "indicatore"?

anche se non

 

Qual è il grande colpo, perché si agita tanto?
 
Dimka-novitsek:

Guardare, non capisco... Sono due condizioni soddisfatte contemporaneamente!!! Forse sono un idiota... Ma non capisco. Questo è ridicolo. Credo di non saper scrivere un operatore if!

Amico, l'intero codice.

Spiegazione, solo per renderla più facile... La raccolta dell'ordine standard, per come la vedo io. Gli ordini aperti separati vengono letti nelle variabili BUY++, SELL++.

Poi queste variabili sono coinvolte in condizioni logiche. Il resto non sembra essere di alcuna importanza, anche se chi lo sa.

In realtà, è chiaro quello che ho visto nelle stampe.

Un sacco di errori logici e tecnici. La logica degli ordini di apertura non è rintracciabile (ho dovuto usare la mia immaginazione). Dovete imparare da soli, scegliendo il vostro codice sciatto (finché non si "raddrizza") OPPURE studiando i codici di altre persone. Ho fatto il tuo codice per te. - Vi aiuterà?

P.S. Come ho detto prima, non è necessario normalizzare i prezzi per un tester. Ma una delle possibili ragioni per l'errore "Wrong price" quando si esegue un ordine di trading può essere lo Slippage, che hai 3 * Point (quando convertito in int) = 0.

File:
rcjipewc.mq4  6 kb
 
Grazie!!!!!
 
san44es:

Gente, un consiglio!

C'è una funzione personalizzata che conta il prezzo basso della quinta barra del timeframe di sfondo, come faccio a farle contare il prezzo di un timeframe specifico?

iLow