[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 243

 
costy_ >> :

Il faut aller acheter quand l'ouverture est supérieure à ma1.

Je comprends que "tumblr" dans || car je ne sais pas comment dénoter par exemple "si" (ma1>ma2&ma1>Open[1] "ou" ma1>ma3&&ma1>Open[1]) "alors" Ouvrir BAY() ;


Vous pouvez voir sur le graphique que toutes les conditions ne sont pas remplies ! !!


Essayé par d'autres moyens sur une bougie 53 achats.


Quelle autre façon de mettre en œuvre la logique ?


Il y a juste un nombre énorme d'erreurs dans votre morceau de code.

Les décrire tous et expliquer pourquoi il en est ainsi et pas autrement.... Je n'ai pas autant de temps.

La seule chose que je vais corriger pour l'instant :

if (( ma1> ma2 && ma1> ma3 && Open[1]> ma1) || 
    ( ma2> ma1 && ma2> ma3 && Open[1]> ma1) ||
    ( ma3> ma1 && ma3> ma2 && Open[1]> ma1)
  )
  OpenBuy();
Je vous donnerai peut-être d'autres conseils quand j'aurai le temps .....



 
Merci. Je l'ai.
if (( ma1> ma2 && ma1> ma3  && Open[1]> ma1) || 
    ( ma2> ma1 && ma2> ma3  && Open[1]> ma1) ||
    ( ma3> ma1 && ma3> ma2  && Open[1]> ma1)
   )
    OpenBuy();

mais je dois le faire.

if ( ma1> ma2 && ma1> ma3 && Open[1]> ma1)
OpenBuy();
if ( ma2> ma1 && ma2> ma3 && Open[1]> ma1)
OpenBuy();
if ( ma3> ma1 && ma3> ma2 && Open[1]> ma1)
OpenBuy();
 
costy_ >> :

>> et je dois

C'est la même chose, mais la première option est plus courte.

 
MrSoros >> :

C'est la même chose, mais la première option est plus courte.

Malheureusement, la première option n'a pas fonctionné correctement sur le graphique (tout est bizarre).

D'abord bien sûr plus belle et la logique est comme ça, c'est du type d'abord addition puis multiplication. =))

 
MrSoros >> :

Les signes sont bons.

L'idée elle-même (fermeture du CCI), de mon point de vue - pas ahchy....

Je suis déjà passé par là...

Mais c'est déjà une question de stratégie.

>> autant de traders, autant de stratégies.


Non, ce n'est pas comme ça que l'algorithme fonctionne, maintenant il ferme sur CCI si le profit est supérieur à 10pp, et j'ai besoin exactement du niveau de profit de 10pp seulement là qui fermerait sur CCI, si le profit est supérieur à 10pp alors il ne devrait pas fermer sur CCI. Actuellement, il se ferme au CCI si la valeur du profit est supérieure à 10pp (

La signification même de l'algorithme dans cette fonction est différente, il y a un niveau de profit de 10pp - c'est-à-dire un profit virtuel, fixé par la clause dans la direction de l'indicateur SSI. Lorsque le prix fait des bénéfices, il passe toujours ce niveau car le SSI regarde à droite, puis après avoir passé ce niveau, le prix peut parfois faire un mouvement inverse pour revenir à l'état initial, ou changer de direction de tendance, - dans ce cas, le SSI regarde toujours dans l'autre direction, et lorsqu'il passe dans la direction opposée au niveau 10pp, un ordre est fixé car le SSI regardera dans la direction opposée.

  if (OrderType() == OP_BUY && cci_0< cci_1 && Bid-OrderOpenPrice() >= Point* profit) OrderClose(OrderTicket(), OrderLots(), Bid, slip, Blue);
  if (OrderType() == OP_SELL && cci_0> cci_1 && OrderOpenPrice() - Ask >= Point* profit) OrderClose(OrderTicket(), OrderLots(), Ask, slip, Red);

  

  cci_0< cci_1 && Bid-OrderOpenPrice() == Point* profit // может вот так? - так вообще не работает(
 

Bonjour.

Vérifiez si la taille du lot est calculée correctement en tant que pourcentage du solde :

//расчёт размера лота
double Lots()
   {
   double ls=MarketInfo(Symbol(),MODE_MINLOT)+MarketInfo(Symbol(),MODE_LOTSTEP)*MathFloor(( procentdepo*AccountBalance()/100000-MarketInfo(Symbol(),MODE_MINLOT))/MarketInfo(Symbol(),MODE_LOTSTEP));
     if( ls>MarketInfo(Symbol(),MODE_MAXLOT))   { ls=MarketInfo(Symbol(),MODE_MAXLOT); }
     if( ls<MarketInfo(Symbol(),MODE_MINLOT))   { ls=MarketInfo(Symbol(),MODE_MINLOT); }
   return( ls);
   }

où procentdepo est le % du dépôt

 
Piboli >> :

Bonjour.

Vérifiez si la taille du lot est calculée correctement en tant que pourcentage du solde :

où procentdepo est le % du dépôt.

Faites-le.

extern double PercentLots  = 0.5;// внешние переменные


//то что ниже закиньте в конец кода
double GetLots() 
{
double minlot = MarketInfo(Symbol(), MODE_MINLOT);
double maxlot = MarketInfo(Symbol(), MODE_MAXLOT);

if( PercentLots!=0)
 {
   double lot = NormalizeDouble(AccountBalance() * PercentLots  /1000.0 / 100.0, 2);
   if( lot < minlot) lot = minlot;
   if( lot > maxlot) lot = maxlot;
  }
  else lot= Lots; 
  return( lot);
  }  

//GetLots() - вставьте в ticket=OrderSend(Symbol(),OP_BUY,GetLots(),Ask,3,stop,Ask+Takeprofit*Point,"",MagicNumber,0,Green);
 
Piboli >> :

Bonjour.

Vérifiez si la taille du lot est calculée correctement en pourcentage du solde :

où procentdepo est le % du dépôt

Mieux encore, utilisez cette fonction d'optimisation du lot, qui fonctionne MM s'il y aura des transactions non rentables, alors le lot sera réduit au lot initial.

//внешние переменные
extern double Lots = 0.1;          //стартовый лот до баланса 500
extern double MaximumRisk = 0.1;   //увеличение лота на каждые 500 баланса
extern double DecreaseFactor = 3.0;//уменьшение лота при серии убыточных позиций


//то что ниже  закиньте перед стартом
double LotsOptimized() {
       double lot = Lots;
       int orders = OrdersHistoryTotal();
       int losses = 0;
       lot = NormalizeDouble(AccountFreeMargin() * MaximumRisk / 500.0, 2);
       if ( DecreaseFactor > 0.0) {
for (int i = orders - 1; i >= 0; i--) {
       if (OrderSelect( i, SELECT_BY_POS, MODE_HISTORY) == FALSE) {
       Print("Error in history!");
       break;
       }
if (OrderSymbol() != Symbol() || OrderType() > OP_SELL) continue;
if (OrderProfit() > 0.0) break;
if (OrderProfit() < 0.0) losses++;
}
if ( losses > 1) lot = NormalizeDouble( lot - lot * losses / DecreaseFactor, 2);
}
if ( lot < 0.1) lot = 0.1;
if ( lot > 1000.0) lot = 1000;
return ( lot);}

int start(){//старт

LotsOptimized() -- вставьте в ticket=OrderSend(Symbol(),OP_BUY, LotsOptimized(),Ask,3, stop,Ask+ Takeprofit*Point,"", MagicNumber,0,Green);
 
Seulement les deux posts précédents ne prennent pas en compte le changement d'échelon du lot. Malheureusement.
 
Vinin >> :
Seulement les deux posts précédents ne prennent pas en compte l'étape du changement de lot. >> Malheureusement.

Si je comprends bien l'étape, quelle part du solde sera ajoutée au lot ?

Ou bien voulez-vous avoir une courbe constante d'augmentation des lots, mais je ne vois pas l'intérêt d'une telle progression.

extern double balans = 500; //шаг баланса

lot = NormalizeDouble(AccountFreeMargin() * MaximumRisk / balans, 1);
Raison: