Domanda per gli intenditori - pagina 8

 

Buon pomeriggio. Nel 'Sensation! Una strategia redditizia è stata trovata!

Rid ha pubblicato un EAquesta mattina. L'ho scaricato, l'ho ottimizzato un po' e l'ho eseguito.

Funziona su un conto demo (dax) senza problemi (mt4 brok-trade).

L'ho testato su un conto reale. Lotto iniziale=0,01 o 0,1.

Non funziona! Il log restituisce un errore

2009.06.12 15:17:26 HlopMaster FDAXM9,M1: importo lotti non valido per la funzione OrderSend

2009.06.12 15:17:26 HlopMaster FDAXM9,M1: OrderSend()- Errore OP_SELLSTOP. op 5087.50000000 sl 0.00000000 tp 0.00000000 4051

//------------------------------------------------------------------

Non riesco a capire perché.

La dimensione del deposito permette di fissare un determinato lotto con una riserva. Non ci sono restrizioni nel codice dell'Expert Advisor per il conto reale.

Allora qual è il problema? Per favore, consigliatemi!


 

Ecco il codice sorgente.

...!!!!!!!!!!!!!!!!!! .........!!!!!!!!!!!!!!!!!

Mi chiedo. Quando toglieranno le restrizioni al codice? Perché non posso postare in una finestra aperta il codice dell'Expert Advisor nella sua interezza in un forum specializzato?

La risposta che ottengo invece di "READY LARGE TEXT SIZE" funziona troppo bene.

Sembra che MQ sia gestito da "cosacchi" di un concorrente che fanno di tutto per far incazzare i visitatori e impedire loro di fare le domande giuste qui.



File:
hlopmaster.mq4  11 kb
 

Ecco i pezzi di codice responsabili del calcolo dei lotti:

//------------------------------------------------
double GetMaxLot()// Функция возвращает максимальный обьем 
//открытой позиции.  
{int i;double maxlot;
   for( i=1; i<=OrdersTotal(); i++)         
   {
      if(OrderSelect( i-1, SELECT_BY_POS)==true) 
       {                                   
           if((OrderType()==OP_BUY ||OrderType()==OP_SELL)  && OrderSymbol()==Symbol()
          && maxlot<OrderLots()){ maxlot=OrderLots();}
       }
    }   
return( maxlot);
}
//-----------------------------------------------
double GetMaxLotOrder()
//Функция возвращает максимальный обьем установленных
// стоп ордеров. 
{int i;double maxlot;
   for( i=1; i<=OrdersTotal(); i++)         
   {
      if(OrderSelect( i-1, SELECT_BY_POS)==true) 
       {                                   
           if((OrderType()==OP_BUYSTOP ||OrderType()==OP_SELLSTOP)  &&
           OrderSymbol()==Symbol() && maxlot<OrderLots())
           { maxlot=OrderLots();}
       }
    }   
return( maxlot);
}
//----------------------------------------------
int GetLastTypePos(){
   int i;datetime dt;int type;
      for( i=1; i<=OrdersTotal(); i++)         
      {
         if(OrderSelect( i-1, SELECT_BY_POS)==true) 
          {                                   
              if((OrderType()==OP_BUY ||OrderType()==OP_SELL)  && OrderSymbol()==Symbol() 
              && dt<OrderOpenTime())
              { dt=OrderOpenTime(); type=OrderType();}
          }
       }   
   return( type);
}
//-----------------------------------------------
int DopOrder(double Lots)
{
int type= GetLastTypePos();
   if( type==1){
     op=Bid+ pips*Point;if( SL>0){ sl=Bid;}else{ sl=0;}if( TP>0){ tp= op+ TP*Point;}else{ tp=0;}
     err=OrderSend(Symbol(),OP_BUYSTOP, Lots,NormalizeDouble( op,Digits),3,NormalizeDouble( sl,Digits),
NormalizeDouble( tp,Digits),"FORTRADER.RU",0,0,Red);
     if( err<0){Print("OrderSend()-  Ошибка OP_BUYSTOP. 
                op "+ op+" sl "+ sl+" tp "+ tp+" "+GetLastError());return(-1);}
   }
   if( type==0){
      op=Ask- pips*Point;if( SL>0){ sl=Ask;}else{ sl=0;}if( TP>0){ tp= op- TP*Point;}else{ tp=0;}
      err=OrderSend(Symbol(),OP_SELLSTOP, Lots,NormalizeDouble( op,Digits),3,NormalizeDouble( sl,Digits),
NormalizeDouble( tp,Digits),"FORTRADER.RU",0,0,Red);
      if( err<0){Print("OrderSend()-  Ошибка OP_SELLSTOP. 
                   op "+ op+" sl "+ sl+" tp "+ tp+" "+GetLastError());return(-1);}
   }
return(0);
}
//-------------------------------------------------
int CloseAllPos(int type)
{  int buy=1; int sell=1;
int i, b=0;int ordertiket;
 
 if( type==1)
   {
   while( buy==1)
     {
        buy=0;
        for( i=0; i<OrdersTotal(); i++)
         {
           if(true==OrderSelect( i, SELECT_BY_POS, MODE_TRADES))
           {
           if(OrderType()==OP_BUY && OrderSymbol()==Symbol() ){ buy=1; 
                                  OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);}
           }else{ buy=0;}
         }  
         if( buy==0){return(0);}
      } 
   }
   
   if( type==0)
   {
      while( sell==1)
     {
        sell=0;
        for( i=0; i<OrdersTotal(); i++)
         {
           if(true==OrderSelect( i, SELECT_BY_POS, MODE_TRADES))
           {
           if(OrderType()==OP_SELL && OrderSymbol()==Symbol() ){ sell=1;
                                 OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); }
           }else{ sell=0;}
         }  
         
        if( sell==0){return(0);}
      } 
     }
   return(0);
   }
//--------------------------------------------------------


 
Rita писал(а) >>

Ecco i pezzi di codice che calcolano i lotti:

L'Expert Advisor non è progettato per funzionare su un conto reale. Se c'è almeno una posizione aperta su altri simboli, allora la logica di lavoro è rotta. Certo, può essere corretto, ma io, per esempio, non vedo molto senso nel farlo.

 
Grazie. Perché allora viene restituito un errore così strano?
 
Rita писал(а) >>
>> Grazie. Perché allora torna un errore così strano?

L'errore molto probabilmente si verifica

   if(OrdersTotal()<1){ err= OpenNewOrders();}
   if(OrdersTotal()>0){ TrailStopOrders();}

quando si chiama TrailStopOrders();

Poiché ci sono già ordini per altri simboli. In questo caso, l'EA non si apre affatto.

Tuttavia, dobbiamo considerare la logica.

Sembra che l'errore si verifichi da qualche altra parte. Ma non sarò in grado di controllarlo. Non ho posizioni aperte.

Posso solo controllarlo nella mia mente. E ho bisogno che la mia EA sia mia per questo.

 
Sapete se c'è un sistema in MT4 per determinare i pip guadagnati o persi sui trade di oggi?
 

Non è molto chiaro cosa vuoi esattamente. Date un'occhiata a questo design.

http://www.kimiv.ru/index.php?option=com_remository&Itemid=13&func=fileinfo&id=45

 
Rita, grazie!
 

Buona sera. È sorto un grosso problema. Non proprio in tema. E un pessimo tempismo.

Ieri sera ho ricevuto un link incomprensibile nel mio ICQ, che ho incautamente cliccato.

Dopo di che, il mio computer si è bloccato e una finestra è apparsa con il suggerimento di inviare un sms.

Ho riavviato il computer alcune volte e si è sbloccato dopo 45-50 minuti.

Ma ora non posso entrare nel mio portafoglio WM

Richiede una sorta di codice di accesso alla chiave. (Le chiavi del file stesso sono).

Non so cosa fare. Chi-knib. era in un sititsiyu simile?