[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 341

 
Chers nouveaux venus ! Certaines questions abordées ici sont très spécifiques et méritent vraiment des conseils et de l'aide. Mais d'autres, eh bien, franchement, découlent du fait qu'en commençant à programmer, certains rédacteurs EXPERT ne lisent même pas un manuel sur le MCL. CONSEIL : Téléchargez le tutoriel (5 mb) et lisez-le. Vous ne devrez pas attendre une réponse du forum - elle sera dans votre tête.
 
costy_ >> :

Les paramètres d'indication sauvegardés sont "introduits" dans les indicateurs une fois lors de l'initialisation du modèle, puis "ils deviennent complètement indépendants"/.

Tous les paramètres modifiés de l'indicateur sont enregistrés dans le modèle. Si vous avez modifié les paramètres de l'indicateur, enregistrez à nouveau le modèle.


>> Merci !

 

mazepa 08.12.2009 17:42

REPONSE : sur le CODE !

Si je comprends l'algorithme, alors à l'heure fixée nous ouvrons un achat (vente), si le prix a passé >10 pips dans l'autre direction, alors nous fermons l'ordre et nous nous positionnons dans la direction opposée.

Pour la clôture, j'utilise ma propre fonction universelle.

//Fonction permettant de clôturer tous les ordres du marché dans--------------------------------------------------------------------------------------------------
void _CloseAllOrder()
{
for(int i=0 ; i<OrdersTotal() ; i++) //croiser tous les ordres pour toutes les devises
{
if (OrderSelect(i,SELECT_BY_POS)==true) //si l'ordre est sélectionné avec succès
{
if (OrderSymbol() !=Symbol()) continue ; //si l'ordre est dans la mauvaise devise, continuer la recherche
{
switch(OrderType()) //dans l'ordre requis, déterminer le type (Bue_Sell) et le fermer
{
case 0 :OrderClose(OrderTicket(),OrderLots(),Bid,2);break ;
cas 1:OrderClose(OrderTicket(),OrderLots(),Ask,2);break ;
}
}
}
}
return ;
}
Donc maintenant, avant d'ouvrir dans la direction opposée, il suffit d'écrire _CloseAllOrder()

 


Mes amis, je ne fais qu'apprendre. S'il vous plaît, ne regardez pas le contenu du programme, aidez-moi simplement à trouver un bug dans le programme :

int start()
{
switch(CurrentState)
{
case STATE_SHORT :
MyOrderTicket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 1, 0, 0,NULL, 1, 0, Red) ;
OrderSelect(MyOrderTicket,SELECT_BY_TICKET) ;
if (OrderModify(OrderTicket(),OrderOpenPrice(),Bid+90*Point,Bid-Profit1*Point,0,Green)==true)
{CurrentState=STATE_1 ;
break ;
}
case STATE_1 :
OrderSelect(MyOrderTicket,SELECT_BY_TICKET) ;
if(Ask <= OrderTakeProfit())
{CurrentState=STATE_SHORT ;
break ;
}
if(Bid >= (OrderOpenPrice()+Profit1*Point)
{CurrentState=STATE_SHORT ;
break ;
}
}
//----
return(0) ;
}


L'erreur est la suivante : \``Fin_du_programme'' - parenthèse gauche déséquilibrée. Où se trouve l'erreur ?









 
Klinskih >> :

Mes amis, je ne fais qu'apprendre. S'il vous plaît, ne regardez pas le contenu du programme, aidez-moi simplement à trouver un bug dans le programme :

Je l'ai :

                    if(Bid >= (OrderOpenPrice()+ Profit1*Point)

besoin :

                    if(Bid >= OrderOpenPrice()+ Profit1*Point)



 

Comment déclarer un tableau unidimensionnel sans appliquer un enregistrement à chaque cellule de la mémoire (est-ce possible ?)

  ии[1]=ExtMapBuffer1[0]; ии[2]=ExtMapBuffer2[0];  ии[3]=ExtMapBuffer3[0]; 

mais par une séquence unidimensionnelle

  ии[3]={ExtMapBuffer1[0],ExtMapBuffer2[0],ExtMapBuffer3[0]} 

ou la séquence unidimensionnelle est seulement pour les constantes numériques et logiques !!!?

 
TheXpert >> :

Je l'ai :

>> nous devons le faire :



Merci, mon ami !

 
future >> :

Une dernière question. Si (OrdersTotal()==0) ce... si le nombre d'ordres ouverts est égal à zéro... alors comment sera-t-il...si le nombre d'ordres ouverts POUR LA JOURNEE est égal à zéro.

N'y a-t-il pas quelque chose comme OrdersDayTotal ?

non, mais nous pouvons toujours écrire notre propre fonction)

int OrdersDayTotal(string Symb)
 {
int cnt,
OrdersDayTotal=0,
Time0=iTime(NULL,PERIOD_D1,0);

for( cnt=0; cnt<OrdersTotal(); cnt++)
   {
   OrderSelect( cnt, SELECT_BY_POS, MODE_TRADES);
   if(OrderSymbol()== Symb && OrderType()<2)
      {
      if(OrderOpenTime()> Time0) OrdersDayTotal++;
      }
   }
for( cnt=0; cnt<OrdersHistoryTotal(); cnt++)
   {
   OrderSelect( cnt, SELECT_BY_POS, MODE_HISTORY);
   if(OrderSymbol()== Symb && OrderType()<2)
      {
      if(OrderOpenTime()> Time0) OrdersDayTotal++;
      }
   }
return( OrdersDayTotal);
 }

Compte les ordres d'achat et de vente, pour un symbole donné, ouverts aujourd'hui. Aucune commande en cours.

if(OrdersDayTotal(Symbol())==0) {...}

quelque chose comme ceci)

 
Stepan241 >> :

mazepa 08.12.2009 17:42

RÉPONSE : Sur le COD !

Si je comprends l'algorithme, nous ouvrons un ordre d'achat (vente) à l'heure fixée, si le prix passe >10 pips dans l'autre direction, nous fermons l'ordre et passons du côté opposé.

Pour la fermeture, j'utilise ma propre fonction universelle.

//Fonction pour fermer tous les ordres de marché dans la fenêtre--------------------------------------------------------------------------------------------------
void _CloseAllOrder()
{
for(int i=0 ; i<OrdersTotal() ; i++) //collecter tous les ordres pour toutes les devises
{
if (OrderSelect(i,SELECT_BY_POS)==true) //si la commande est sélectionnée avec succès
{
if (OrderSymbol()!=Symbol()) continue ; //si la commande est dans la mauvaise devise, continuer la recherche
{
switch(OrderType()) //lorsque l'ordre requis est soumis, définissez son type (Bue_Sell) et fermez-le.
{
cas 0:OrderClose(OrderTicket(),OrderLots(),Bid,2);break ;
cas 1:OrderClose(OrderTicket(),OrderLots(),Ask,2);break ;
}
}
}
}
retour ;
}
Donc maintenant, il suffit d'écrire _CloseAllOrder() avant d'ouvrir dans la direction opposée.


La fonction est la bombe, ça m'a pris quelques pages. Merci beaucoup.
 
Stepan241 >> :

mazepa 08.12.2009 17:42

RÉPONSE : Sur le COD !

Si je comprends bien l'algorithme, nous ouvrons un ordre d'achat (de vente) à l'heure fixée, si le prix a bougé de >10 pips dans l'autre direction, nous fermons l'ordre et allons dans la direction opposée.

Pour la fermeture, j'utilise ma propre fonction universelle.

//Fonction pour fermer tous les ordres de marché dans la fenêtre--------------------------------------------------------------------------------------------------
void _CloseAllOrder()
{
for(int i=0 ; i<OrdersTotal() ; i++) //collecter tous les ordres pour toutes les devises
{
if (OrderSelect(i,SELECT_BY_POS)==true) //si la commande est sélectionnée avec succès
{
if (OrderSymbol()!=Symbol()) continue ; //si la commande est dans la mauvaise devise, continuer la recherche
{
switch(OrderType()) //lorsque l'ordre requis est soumis, définissez son type (Bue_Sell) et fermez-le.
{
cas 0:OrderClose(OrderTicket(),OrderLots(),Bid,2);break ;
cas 1:OrderClose(OrderTicket(),OrderLots(),Ask,2);break ;
}
}
}
}
retour ;
}
Donc maintenant, il suffit d'écrire _CloseAllOrder() avant d'ouvrir dans la direction opposée.


La fonction est la bombe, ça m'a pris quelques pages. Merci beaucoup.