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

 
obla4ko:
Il ne faut pas penser comme un bâton - c'est une chose très subtile :))), virtuelle, je dirais, et elle devrait réagir naturellement à la fraude dans l'histoire. S'il ne réagissait pas aux effacements, j'imagine la lenteur qu'il aurait dans la vie réelle - 100 livres par an pour 10K - au mieux... Eh bien, il est plus facile de garder l'argent à la banque - ils donnent 3-6 pour cent !)

))) Bien sûr que c'est plus facile ! Qui peut dire... // Et qui a dit que ce serait facile ? )))

Un moyen de s'en sortir - aller à la bourse. Ce genre de choses ne s'y produit pas en principe. Mais de cette façon... Pour tous les - comment dire - hum... ... bizarreries que vous pouvez travailler sur le Forex, aussi.

Le meilleur moyen est, bien sûr, de le tester sur le compte réel. Si les principes établis dans le conseiller expert sont corrects (et cela peut être vérifié exactement dans le testeur), alors, en appliquant les mesures de force majeure sur un compte réel, la transaction sera bonne+. Peut-être pas à +++++++ comme dans le testeur, mais quand même...))

À ce propos, il est très utile de supprimer les lacunes du flux de citations, qui rendent les indicateurs fous. Vous pouvez regarder dans mes codes - Kill Gap.

 

Techno:
obla4ko, создайте переменную типа datetime x, и пусть это будет время открытие бара, на котором произошел стоплосс. А в условии открытия поставте, что (Time[0]!=x). При этом x должно обновляться при новом сработавшем стоплосе. Это первый вариант. И второй как я уже в третий раз пишу, после срабатывания стопа включить ожидание 1 бар, это будет совершенно тоже самое, не логично разве?

J'ai la partie du code responsable de l'ouverture d'une position affichée dans mon dernier message. Pourriez-vous y intégrer ce que vous avez dit ici - comme on dit "mieux vaut être vu une fois que...." :)
 

Bonjour !!!

À la page 71 de ce fil, granit77 a écrit un article très intéressant !

Извините, что встреваю, поделюсь ламерским способом удобной записи множества условий. При наладке легко добавлять/убирать, не заботясь о скобках, и все наглядно. 
if (true
    && StochK_0<StochD_1
    && StochD_1 > 80 
    && cci_0 < cci_1    
    && cci_0 > 100 
    //&& .... а это я пока убрал     
   )

voici un échantillon et j'ai essayé de faire quelque chose

if(((Sto_0>Sto_1&&Sto_0< 20)&&(OsMA_0>OsMA_1&&OsMA_0<-P)&&(Macd_0>Macd_1&&Macd_0<-N)))
// это основа
if(true
      &&Sto_0>Sto_1&&Sto_0< 20
      &&OsMA_0>OsMA_1&&OsMA_0<-P
      &&Macd_0>Macd_1&&Macd_0<-N
      )//а это то что получилось

Je demande parce que c'est tellement inhabituel .....

 

Pourquoi cela fonctionne et compte correctement en augmentant la valeur d'une variable de 10 pour cent :

TStartS = MathRound(TStartS+TStartS*0.1);

... mais pas celui-ci :

TStartS = MathRound(TStartS+TStartS/100*PercentTakePr); // где PercentTakePr - внешняя переменная, равна 10, 20, 30, и т.д. ...
Quelle est la différence, je ne sais pas...
 
artmedia70:

Pourquoi cela fonctionne et compte correctement en augmentant la valeur d'une variable de 10 pour cent :

... mais pas celui-ci :

quelle est la différence, je ne sais pas...





ou peut-être que c'est comme ça.

TStartS = MathRound(TStartS+(TStartS/100*PercentTakePr)); 
 

Quel est le problème ? Il suffit de décomposer la chaîne en sous-chaînes, sans en modifier le contenu. Tout fonctionnera de la même manière, mais c'est plus facile à lire et à modifier, il suffit de commenter les lignes inutiles.

Il s'avère que les pros écrivent de cette manière depuis longtemps, et qu'ils la formatent même mieux, alors j'ai inventé le vélo. :))

if (true              &&
    StochK_0<StochD_1 && 
    StochD_1 > 80     &&  
    && cci_0 < cci_1  &&   
    && cci_0 > 100 
   )

//((Sto_0>Sto_1&&Sto_0< 20)&&(OsMA_0>OsMA_1&&OsMA_0<-P)&&(Macd_0>Macd_1&&Macd_0<-N))
// Ваш вариант вот так будет выглядеть наиболее прозрачно, на мой взгляд
if (true                         &&
    (Sto_0 >Sto_1  && Sto_0 <20) &&
    (OsMA_0>OsMA_1 && OsMA_0<-P) &&
    (Macd_0>Macd_1 && Macd_0<-N)  
   ) 
 
artmedia70:

Pourquoi cela fonctionne et compte correctement en augmentant la valeur d'une variable de 10 pour cent :

... mais pas celui-ci :

Quelle est la différence ? Je ne comprends pas...





0,1 est un double et 100 est un int.

Cherchez la conversion de type dans le manuel.

 
Svinozavr:

0,1 est un double et 100 est un int.

Cherchez la conversion de type dans le manuel.

Donc j'ai TOUTES les variables là int... Il s'avère que... ouch... Fais chier... continuez à creuser...

C'est comme ça que ça marche :

LastTakeProfitS = MathRound(LastTakeProfitS+LastTakeProfitS/100*PercentTakePr);
... et si vous collez une autre variable du même type ici, ça ne fonctionne pas... J'en ai pris plein la vue ce matin...
 
obla4ko:

J'ai la partie du code responsable de l'ouverture d'une position affichée dans mon dernier message. Pourriez-vous y intégrer ce que vous avez dit ici - comme le dit le dicton "mieux vaut être vu une fois que...." :)

Voici un schéma. Non vérifié, mais devrait fonctionner, les parties manquantes doivent être ajoutées à partir du code original. Le rouge marque le numéro dont le changement augmentera l'attente, le numéro 2 signifie qu'une bougie attend. Si vous avez besoin de 2 bougies d'attente, mettez-en trois, etc.

bool work=1;int tick;datetime t;
int start()
{
  if(!work){if(t!=iTime(NULL,0,1)){t=iTime(NULL,0,1);tick++;}}
  if(tick==2){work=1;tick=0;} 
   
   time();
   if(OrdersTotal()==0)CheckForOpen();
  //-- code
}
//----
void CheckForOpen()
{
   double ma;
   int    res;
    
   ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);

   if(work && Open[1]>ma && Close[1]<ma)  
     {
      res=OrderSend(Symbol(),OP_SELL,Lots,Bid,30,Bid+Stoploss*Point,Bid-Takeprofit*Point,"",MAGICMA,0,Red);
      return;
     }

   if(work && Open[1]<ma && Close[1]>ma)  
     {
      res=OrderSend(Symbol(),OP_BUY,Lots,Ask,30,Ask-Stoploss*Point,Ask+Takeprofit*Point,"",MAGICMA,0,Blue);
      return;
     }

}
//----
void time()
{
static datetime time;
    
  if(OrdersHistoryTotal()==0)return;
  for(int i=0;i<OrdersHistoryTotal();i++)
       {
       OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
         if(OrderCloseTime()>time && OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
            {
            time=OrderCloseTime();
            if(OrderProfit()<0)work=0;
            }
       }    
   
}
 
artmedia70:

Donc, j'ai TOUTES les variables là int... Il s'avère que... ouch... Fais chier... continuez à creuser...

Celui-là marche :

...mais si vous ajoutez une autre variable du même type, cela ne fonctionne pas... Ça m'a époustouflé ce matin...


C'est... Je l'ai trouvé... Au lieu de 100, c'est 100.0. Je te tuerais...