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

 
CLAIN:

Camarades, à l'aide s'il vous plaît... J'ai écrit un code simple, mais lors de la compilation il dit que les parenthèses sont déséquilibrées, mais je les ai déjà comptées 300 fois - tout est en place

L'idée est simple - si le MACD a été supérieur (ou inférieur) à 0 pendant 7 minutes ou moins, la position s'ouvre.


Vérifiez cette fonction

void AnalyzeSignal(int signal) 
{ 
  if(signal == 100) 
  { 
    ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,slip,Bid-TS*Point,Bid+TP*Point,"покупаем",Magic,0,Green); 
    if(ticket>0) 
    { 
      OrderSelect(ticket,SELECT_BY_TICKET); 
      Print("открылись на покупку по цене:" OrderOpenPrice()); 
    } 
    else 
    { 
      Print("открыться не удалось по причине:" GetLastError()); 
      return(0); 
    } 
  } 
  if(signal == -100) 
  { 
    ticket = OrderSend(Symbol(),OP_SELL,lots,Bid,slip,Ask+TS*Point,Ask-TP*Point,"Продаем",Magic,0,Green); 
    if(ticket>0) 
    { 
      OrderSelect(ticket,SELECT_BY_TICKET); 
      Print("открылись на продажу по цене:" OrderOpenPrice()); 
    } 
    else 
    { 
      Print("открыться не удалось по причине:" GetLastError()); 
      return(0); 
    } 
  } 
} 

//---- 
return(0); 
} 
 
CLAIN:
p.s. comment dessiner un script aussi joliment que vous le faites ?

Il y a un bouton SRC lorsque vous écrivez votre réponse.

En ce qui concerne les parenthèses, j'ai l'habitude de préciser ce à quoi se réfère la parenthèse fermée

}//for

}// (signal...

 
splxgf:

Et pour ce qui est des parenthèses, j'ai l'habitude de préciser à quoi se réfère la fermeture

}//for

}// (signal...


"au goût et à la couleur..." - mais je dois admettre que cette approche surcharge le code d'informations inutiles + prend du temps pour écrire des lignes de code supplémentaires + ne résout pas le problème de l'imbrication profonde (numérotation des niveaux ?).

Mieux structurer le code - comme dans l'exemple ci-dessus

 

Bonjour, pourriez-vous me dire comment écrire une condition pour qu'après avoir ouvert un ordre, le second ne puisse pas s'ouvrir sur la même bougie. J'écris ce qui suit :

si (... && CountOrder<2 && (BarLast>1 || BarLast==-1))
{
OrderSend(Symbol(),OP_BUY,MinLot,Ask,0,VStopLossLong,0, "BUY : ",MagicL,0,Green) ;

}

// compte le nombre d'ordres ouverts pour un titre
int CountOrder=0 ;
for (int j=0 ; j<OrdersTotal() ; j++)
if (OrderSelect(j,SELECT_BY_POS,MODE_TRADES))
if (OrderSymbol()==Symbol()) CountOrder++ ;

// numéro de barre de la dernière position fermée ou -1, si elle n'a pas encore été ouverte
int BarLast=BarLastClosePose() ;


и

// numéro de barre de la dernière position fermée
int BarLastClosePose()
{
datetime t ;
int i ;

for (i=0 ; i<OrdersHistoryTotal() ; i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
//if (OrderMagicNumber()!=Magic) continue ;
if (OrderSymbol()!=Symbol()) continue ;
if (OrderType()>1) continue ;
if (t<OrderCloseTime()) t=OrderCloseTime() ;
}
}

return (iBarShift(Symbol(),Period(),t,true)) ;
}

 
Merci , Roger .
 
datetime LastTradeBar;

bool CanTrade = True;

int Start()

{ 

if (LastTradeBar==Time[0] ) CanTrade=False; else CanTrade=True; 

if (... && CountOrder<2 && (BarLast>1 || BarLast==-1))
{
if (CanTrade)

{

OrderSend(Symbol(),OP_BUY,MinLot,Ask,0,VStopLossLong,0,"BUY: ",MagicL,0,Green);

LastTradeBar=Time[0];

} 

}
En fait, la variable logique est superflue ici.
 
Vinin:


Vérifiez cette fonction


Vinin, vérifié, tout est bien dans cette fonction... return(0) fait référence à la fonction de départ, et si on ne compte pas les parenthèses attachées à return'y, on obtient 14 parenthèses... 7 dans chaque sens
 
CLAIN:

Vinin, vérifié, tout est bien dans cette fonction... return(0) fait référence à la fonction de départ, et si on ne compte pas les parenthèses qui sont attachées à return'y, on obtient 14 parenthèses... 7 dans chaque direction.

Copier chaque fonction dans un fichier séparé et vérifier la compilation aide.

Si les crochets sont corrects, indiquez alors où se termine le début et où commence le signal MACD.

int start() 
{ 
//---- 

int total,ticket; //объявил тотал и тикет 
int signal = signal_MACD(); //сигнал МАКД передает значение в сигнал
AnalyzeSignal(signal); //аналайз сигнал анализирует сигнал
int MACD[8] = {0,1,2,3,4,5,6,7}; //создал одномерный массив МАКД
MACD[0] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,7); 
///Бла-бла-бла
MACD[7] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,0); 

total = OrdersTotal(); //тотал считает ордера
///Тут большая жирная закрывающая скобка, если конечно следующая строчка это функция
int signal_MACD()
 
splxgf:

Copier chaque fonction dans un fichier séparé et vérifier la compilation aide.

Si les crochets sont corrects, indiquez où se termine le début et où commence le signal MACD.


hmm... int signal_MACD() est bien une fonction... mais pourquoi doit-elle être derrière la fonction de départ ? honnêtement, je ne comprends pas pourquoi certaines fonctions sont écrites à l'extérieur du départ et d'autres à l'intérieur... quelle est la différence ?
 
Pour être honnête, je ne sais pas s'il est possible de décrire une fonction à l'intérieur d'une autre, je n'ai jamais rencontré une telle chose.
Raison: