[ARCHIVE !] Toute question de débutant, pour ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 4. - page 371

 

La restauration des ex-associations n'a pas aidé - le kool-reader est un ex-reader. J'ai pensé que ça pourrait aider. C'est dommage. Y a-t-il autre chose ? Ils ont un lien vers d'autres extensions de fichiers, mais pas de fb2.
 
belous:

Les gars...aide qui sait !!!!


L'essence de la stratégie : Entrée par stochastique (5,14,3) sortie également par stochastique mais avec une autre période (5,3,3). Ici je ne comprends pas comment peut zdelat une sortie par les stochastiques, et non sur le signal inverse ?
J'ai un problème et je n'ai aucune idée de la façon dont il peut être résolu, je vais essayer de vous expliquer.
Donc, il y a 2 fonctions dans le code que j'ai exposé
...

Postez les codes sur le forum avec le CRS. Et il n'y a pas de quoi crier victoire.


 
Bonjour.Qui peut suggérer quel est le problème avec le conseiller.Lorsque la compilation donne l'erreur que vous devez mettre une parenthèse, je mets-compile donne un autre que la parenthèse est mis mal.Toute ma tête est déjà cassé.
Dossiers :
 
artemka_1981:
Bonjour, est-ce que quelqu'un pourrait me conseiller sur le problème de mon EA. Je continue à avoir une erreur pendant la compilation, je continue à avoir une erreur quand j'essaie d'ouvrir les parenthèses et le compilateur me donne une autre erreur quand j'essaie de fermer les parenthèses.

Si vous mettez une accolade de fermeture à la fin,

ajouter des lignes comme OrderMagicNumber() == )

et mettre une parenthèse fermante dans l'un d'eux, tout se compile

 
Pouvez-vous me dire comment définir correctement l'expiration des ordres? J'ai essayé d'écrire TimeCurrent()+60, les ordres ne s'ouvrent pas. En général, ce paramètre est autorisé au niveau du courtier
 
sss2019:
Dites-moi comment définir correctement l'expiration d'un ordre ? J'ai essayé d'écrire TimeCurrent()+60, cela n'ouvre pas les ordres. En général, ce paramètre est autorisé chez le courtier
.

60 est égal à 60 secondes, donc vous ne pouvez probablement pas le fixer aussi bas (j'ai une limite de 10 minutes, par exemple).

essayez TimeCurrent()+60*60*24 - un jour

et voir quel code d'erreur revient

 
ilunga:

Si vous mettez une accolade de fermeture à la fin,

ajouter des lignes comme OrderMagicNumber() == )

et mettre une parenthèse fermante dans l'un d'eux, tout se compile

Bonjour. J'ai ajouté une parenthèse et maintenant l'erreur est '\end_of_program' - parenthèse gauche non équilibrée. Pas clair ( mettre une parenthèse fermante dans l'un d'entre eux )
if(tim<iTime(Symbol(),PERIOD_D1,0)) return(1);
 return(0);
 }
 
 OrderMagicNumber()

 
artemka_1981:
Bonjour. J'ai ajouté une parenthèse et maintenant l'erreur est '\end_of_program' - parenthèse gauche non équilibrée. Pas clair ( mettre une parenthèse fermante dans l'un d'entre eux )

cela se compile comme ceci :

//+------------------------------------------------------------------+
//|                                                Open_Buy_Sell.mq4 |
//|                                                                  |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#define magic 999

#property link      "http://www.metaquotes.net"
extern double  _lots         = 0.01;
extern int     _takeProfit   = 1200;
extern int      maxpos       = 1;     // количество поз
extern bool    _trailingStop = true;
//+------------------------------------------------------------------+

int start()
  {
   double _slBuy=0.0,_slSell=0.0, _tpBuy=0.0, _tpSell=0.0, _opBuy=0.0, _opSell=0.0;

//if (iVolume(Symbol(),PERIOD_D1,0)>1) return;
//     if (Volume[0]>1) return;
     if (_trailingStop){ 
     _TrailingStop();
      }
   _opBuy=NormalizeDouble(iHigh(Symbol(),0,1), Digits);
   _slBuy=NormalizeDouble(iLow(Symbol(),PERIOD_D1,1), Digits);
   _tpBuy=NormalizeDouble(Ask+_takeProfit*Point, Digits);
      if ( _opBuy<Ask && CountPos(1)<maxpos)
       if(barOpen(OP_BUYSTOP)==1 ||barOpen(OP_BUY)==1 )
        OrderSend(Symbol(),OP_BUYSTOP,_lots,_opBuy,15,_slBuy,_tpBuy,"Open_Buy_Sell",0,Green);

   _opSell=NormalizeDouble(iLow(Symbol(),0,1), Digits);
   _slSell=NormalizeDouble(iHigh(Symbol(),PERIOD_D1,1), Digits);
   _tpSell=NormalizeDouble(Bid-_takeProfit*Point, Digits);
     if (_opSell>Bid && CountPos(0)<maxpos)
      if(barOpen(OP_SELLSTOP)==1 ||barOpen(OP_SELL)==1 )
       OrderSend(Symbol(),OP_SELLSTOP,_lots, _opSell,15,_slSell,_tpSell,"Open_Buy_Sell",0,Red);
//----
   return(0);
  }
//+------------------------------------------------------------------+  
 //Проверяем количесвто позиций.
   int CountPos(int type) 
{//Описание http://fxnow.ru/blog.php?user=Yuriy&blogentry_id=66

int i;
int col;
int count=0 ;
for(i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS)==true)
{
if(OrderType()==OP_BUYSTOP && OrderSymbol()==Symbol() && type==1 && OrderMagicNumber()== magic){count++;}
if(OrderType()==OP_SELLSTOP && OrderSymbol()==Symbol() && type==0 && OrderMagicNumber()== magic){count++;}
         }
       }   
return(count);
}
//+------------------------------------------------------------------+
void _TrailingStop(){
   int i;
   double _stopLossSellF=NormalizeDouble(iHigh(Symbol(),0,1), Digits),
          _stopLossBuyF=NormalizeDouble(iLow(Symbol(),0,1), Digits);
   if (OrdersTotal()>0){
      for (i=OrdersTotal()-1; i>=0; i--){
         if (OrderSelect(i, SELECT_BY_POS)){
            if (OrderSymbol()==Symbol() && OrderMagicNumber()==magic){
             
               if (OrderType()==OP_BUY && OrderOpenPrice() < _stopLossBuyF){
                  while (IsTradeContextBusy()) Sleep(1000);
                  RefreshRates();
                  OrderModify(OrderTicket(),OrderOpenPrice(),_stopLossBuyF,OrderTakeProfit(),OrderExpiration(),CLR_NONE);
               }
           
               if (OrderType()==OP_SELL && OrderOpenPrice() > _stopLossSellF && _stopLossSellF!=0.0){
                  while (IsTradeContextBusy()) Sleep(1000);
                  RefreshRates();
                  OrderModify(OrderTicket(),OrderOpenPrice(),_stopLossSellF,OrderTakeProfit(),OrderExpiration(),CLR_NONE);
               }
            }
         }
      }
   }
return;
}
int barOpen(int ty)
{
datetime tim=0;
 for(int i=0; i<=OrdersTotal(); i++)
    {  
       if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))continue;
       if(OrderSymbol() !=Symbol()|| OrderMagicNumber()!= magic|| OrderType()!=ty) continue; 
       if(tim<OrderOpenTime())        
          tim=OrderOpenTime();
   }
 for(i=0; i<=OrdersHistoryTotal(); i++)
    {  
       if (!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue;
       if(OrderSymbol() !=Symbol()|| OrderMagicNumber()!= magic|| OrderType()!=ty) continue; 
       if(tim<OrderOpenTime())        
          tim=OrderOpenTime();
   }
 
if(tim<iTime(Symbol(),PERIOD_D1,0)) return(1);
 return(0);
}
 

Pouvez-vous me dire que si j'ai deux commandes consécutives OrderSend fixant des ordres, dois-je placer la fonction IsTradeAllowed entre elles ?

ou n'est-ce pas nécessaire et l'EA passera du premier appel OrderSend au second seulement après un ordre passé avec succès ?

Si IsTradeAllowed est toujours nécessaire, quel délai doit être fixé dans la boucle while ?

 
Y a-t-il une erreur dans cette ligne ? Merci beaucoup.
if(OrderType()==OP_BUYSTOP && OrderSymbol()==Symbol() && type==1 && OrderMagicNumber()==MAGICMA ){count++;}
if(OrderType()==OP_SELLSTOP && OrderSymbol()==Symbol() && type==0 && OrderMagicNumber()==MAGICMA ){count++;}
ilunga:

C'est comme ça que ça se compile :

Maintenant, lorsque le test n'ouvre aucune transaction dans le journal, il est écrit Open_BuyS_SellS EURUSD,Daily : OrderSend error 131.

Raison: