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

 
harvest:
Messieurs, pourriez-vous me donner un exemple de la fonction qui déplace une position ouverte vers le breakeven (travail sur tick), mon Expert Advisor a un chalut, le début de ce chalut est seulement après la fonction de rollover à l'achat. Merci d'avance.


Voir la bande-annonce - la bibliothèque des chaluts de Yury Dzyuban - en particulier, comment elle résout la question de savoir si le chalut est exécuté uniquement à partir du profit, c'est-à-dire, si la valeur de la variable trlinloss = false, si le chalut est exécuté dans la zone de perte. Modifiez votre fonction de chalutage en fonction de cet exemple et c'est tout.

Dossiers :
 

Mes amis, pouvez-vous me dire pourquoi le Martin classique ne fonctionne pas ? Il n'ouvre que des offres d'achat !!! Cela fait un mois que j'y touche - aucune émotion ! Il fonctionne bien dans le testeur de stratégie, mais pas sur la démo. Une autre chose intéressante - lorsque je règle T/S et T/P 1000 - il s'ouvre uniquement à l'achat, et lorsque je règle 200 - à l'achat et à la vente... Mec, quelle est la différence ?

voici le code : aidez-nous

//+------------------------------------------------------------------+ 
//| StMartin.mq4 | 
//| Sergey Kodolov | 
//| 84232676421@mail.ru | 
//+------------------------------------------------------------------+ 
#property copyright "Sergey Kodolov" 
#property link "84232676421@mail.ru" 

    extern int TP = 1000; 
    extern int TS = 1000; 
    extern double lots = 0.1; 

    double volumz; 
    int total,ticket; 
    int slip = 3; 
    int Magic = 7; 

 


//+------------------------------------------------------------------+ 
//| expert initialization function | 
//+------------------------------------------------------------------+ 
int init() 
  { 
//---- 

   ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,slip,Bid-TS*Point,Bid+TP*Point,"First order",Magic,0,Yellow); //открываем первый ордер 
 
//---- 
   return(0); 
  } 
//+------------------------------------------------------------------+ 
//| expert deinitialization function | 
//+------------------------------------------------------------------+ 
int deinit() 
  { 
//---- 

//---- 
   return(0); 
  } 
//+------------------------------------------------------------------+ 
//| expert start function | 
//+------------------------------------------------------------------+ 
int start() 
  { 
//---- 



OrderOpenFunction(); 

//---- 
   return(0); 
  } 
//+------------------------------------------------------------------+ 

void OrderOpenFunction()
{
   total = OrdersTotal();
   if(total < 1) 
   { 
      OrderSelect(0,SELECT_BY_POS,MODE_HISTORY); 
      volumz = OrderLots(); 
      if(OrderProfit()<0) 
      { 
         if(OrderType() == OP_BUY) 
         { 
            double lot1 = volumz*2; 
            ticket = OrderSend(Symbol(),OP_SELL,lot1,Bid,slip,Ask+TS*Point,Ask-TP*Point,0,Magic,0,Red); 
         } 
         if(OrderType() == OP_SELL) 
         { 
            double lot2 = volumz*2; 
            ticket = OrderSend(Symbol(),OP_BUY,lot2,Ask,slip,Bid-TS*Point,Bid+TP*Point,0,Magic,0,Green); 
         } 
      } 
      if(OrderProfit()>0) 
      { 
         if(OrderType() == OP_BUY) 
         { 
            ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,slip,Bid-TS*Point,Bid+TP*Point,0,Magic,0,Green); 
         } 
         if(OrderType() == OP_SELL) 
         { 
            ticket = OrderSend(Symbol(),OP_SELL,lots,Bid,slip,Ask+TS*Point,Ask-TP*Point,0,Magic,0,Red); 
         } 
      } 
   } 
}      
  
 
Alp:

Ensuite, cela devient encore plus flou. Supposons que j'achète un euro pour 1 000 000 (1k) de dollars (le courtier multiplie ce montant par 100, ce qui fait que la transaction se fait pour 100k), que le graphique saute 100 points à la hausse et que je les vende, ce qui me rapporte 10 000 dollars, sans compter la commission du courtier et le spread, ce qui fait que 6000 $ nets sont dans ma poche. (Il est clair qu'après la vente, il chutera à nouveau de 100 points.) C'est absurde ! !!!. Peut-être qu'il va tomber au fond après tout ? Sinon, les très grands acteurs gagneraient des milliards sans rien faire.


Alors je ne sais pas...

En général, la chose est probablement que pour un mouvement de prix notable, il est nécessaire d'acheter ou de vendre pour un montant très important, TRÈS important. Pour de telles sommes, l'effet de levier n'est pas de 1/200, comme je l'ai, mais de 1/2 au sens figuré. Eh bien, c'est purement personnel. Je peux écrire de telles absurdités...

 
Il y a une chose qui me surprend. J'ai posté le code ici plus tôt, il y avait une erreur, il m'a aidé à la réparer, Sepulca m'a aidé, merci à elle, jusqu'à maintenant le code fonctionne tous... Mais je ne comprends toujours pas l'énigme : dans la première boucle, le sélecteur d'ordre a sélectionné un ordre, il n'y a pas eu d'erreur, et ensuite, lorsque j'ai sélectionné le même ordre dans une autre ligne, en dessous, le sélecteur d'ordre a montré une erreur ? Si vous pouvez, jetez-y un coup d'oeil, je suis juste curieux.
for(  i=0;i<=OrdersHistoryTotal();i++){
    OrderSelect(i ,SELECT_BY_POS,MODE_HISTORY);
     if (OrderMagicNumber( )== magic) { if(OrderSymbol()== Symbol()) {





 current = OrderOpenTime();  Alert ( " current = OrderOpenTime(); ",  current);Alert ( " max ", max );
      
      if (current > max) 
      {                    
         max = current;      
         ticket = OrderTicket();   Alert ( " ticket = OrderTicket();  ", ticket );
      }}}}


       if (ticket>-1){
      OrderSelect( ticket,SELECT_BY_TICKET,MODE_HISTORY);Alert ("SELL Select error HISTORYticket ", GetLastError( )  ) ;
Dimka-novitsek:

Pas question ! Pourquoi pas ? Il n'y avait aucun ordre ouvert au moment du dépassement ! Peut-être que je ne comprends pas.

Le cycle de recherche est aussi sur l'histoire ! C'est là que je l'assigne à la variable int ticket !

Et il jure, excusez-moi, 2012.02.04 11:28:47 2011.12.06 16:35 GMT EURUSD,M30 : Alerte : SELL Select error HISTORYticket 4105

Quand il passe de MODE_HISTORY à MODE_TRADES ?

Et surtout, je sélectionne le même ordre dans l'historique à l'aide de la sélection d'ordre, et il est sélectionné en premier, sinon je ne pourrais pas travailler avec lui ! Il n'y a pas de logique !!!!!! je suis choqué.


 
Pouvez-vous me dire où je peux trouver un tel EA ou script... Il y a un groupe d'ordres (9-11) placés de part et d'autre du prix à une distance de 5-7 pips de celui-ci. le temps pour les déclencher est strictement limité. par conséquent, très souvent les ordres ne sont pas pris et ils sont retirés. les ordres sont placés tôt le matin, en règle générale, le marché est fortement plat. je veux que le deuxième groupe d'ordres se déplace après le prix lorsqu'il s'approche de l'un des groupes d'ordres. en d'autres termes, une piste d'ordre en attente avec tp et sld. est-ce possible ? merci beaucoup par avance.
 

Besoin d'aide !

J'ai le bloc suivant dans mon EA (Event Counter) :

if (isCloseLastPosByStop()==True) //Si le dernier ordre a été fermé par Stop

{
N=N+1 ;
Alert(N, " moose ") ;
} sinon N=0 ;

QUESTION : comment écrire les données dans un fichier (Excel) au lieu de les afficher à l'écran ?

 

Bon après-midi.

Veuillez indiquer pourquoi les flèches ne sont pas dessinées, code :

ObjectCreate("miniDown", OBJ_ARROW, 0, Time[1], Open[1]) ;
ObjectSet("miniDown", OBJPROP_ARROWCODE, 241) ;
ObjectSet("miniDown", OBJPROP_COLOR, Yellow) ;

 

Supposons que EURUSD=1.44757, GBPUSD=1.63366, vous voulez qu'ils soient proches l'un de l'autre.

Laissez-moi vous expliquer :

a=GBPUSD/EURUSD=1,12855336874901 environ 1,12855 ,

c'est-à-dire que si je veux acheter/vendre une devise de manière à ce que la transaction soit approximativement égale en valeur, alors

J'ai besoin d'acheter/vendre EURUSD*a, mais il n'y a pas de tel lot, donc ma question est comment l'implémenter, le calcul du lot ?

Je n'en ai pas beaucoup, alors ma question est la suivante : comment cela fonctionne-t-il ?

 
T-G:
je souhaite partager la fonction permettant de calculer le lot maximum autorisé, en tenant compte des positions ouvertes, en d'autres termes, en utilisant les fonds propres. la fonction standard calcule le risque, mais si j'ai des positions, je n'ai pas assez d'argent pour les ouvrir
.

J'avais l'habitude de l'écrire pour une EA personnalisée :

//+----------------------------------------------------------------------------+
double CorrectLots(double lt, int Part=2) {
   double ltcorr, Money, MoneyCorr;
   double dig      = MarketInfo(Symbol(),MODE_DIGITS);
   double MaxLot   = MarketInfo(Symbol(),MODE_MAXLOT);
   double MinLot   = MarketInfo(Symbol(),MODE_MINLOT);
   double StpLot   = MarketInfo(Symbol(),MODE_LOTSTEP);
   double OneLot   = MarketInfo(Symbol(),MODE_MARGINREQUIRED);
   double TradeMrg = NormalizeDouble(AccountFreeMargin()/Part,dig);    // Свободные средства, разрешенные к торговле
   
   lt=MathAbs(lt);
   ltcorr=lt;                                      // Зададим начальное значением ltcorr равным значению lt
   if (lt>=MaxLot) ltcorr=MaxLot;                  // Проверим превышение допустимых ...
   if (lt<=MinLot) ltcorr=MinLot;                  // ... значений лота
   Money=lt*OneLot;                                // Вычисляем стоимость открываемой позы
   if (Money<TradeMrg) return(ltcorr);             // Если свободных средств больше, чем цена позиции -  возвращаем неизменённый лот
   else if (Money>=TradeMrg) {                     // Если цена позиции равна или больше, чем есть свободных средств, то ...
      ltcorr=MathAbs(MathFloor(TradeMrg/OneLot/StpLot)*StpLot);         // ... рассчитаем допустимый лот
      MoneyCorr=ltcorr*OneLot;                      
      Print("Func CorrectLots: лот ",lt," скорректирован до ",DoubleToStr(ltcorr,2),
            " Стоимость до корректировки = ",DoubleToStr(Money,dig),
            " Стоимость после корректировки = ",DoubleToStr(MoneyCorr,dig)
            ); 
      return(ltcorr);                                                   // ... и вернём его значение
      }
   Print("Func CorrectLots: лот вернули без изменений");
   return(ltcorr);                                 // Возврат изначального лота в непредусмотренных случаях с сообщением
}
//+----------------------------------------------------------------------------+

Afin de corriger le lot, vous devez appeler la fonction en insérant comme paramètre lt le lot sur lequel vous souhaitez ouvrir une position, et à la place du paramètre Part - le nombre par lequel les fonds libres utilisés dans la transaction seront divisés. Par exemple, pour échanger seulement la moitié des fonds libres, la partie doit avoir une valeur de 2, si un tiers, alors 3, un quart - 4, etc.

double Lot=CorrectLots(0.1, 2);

Après avoir appelé la fonction, insérez Lot comme paramètre de la fonction OrderSend() ;

La fonction limite les lots dans un EA avec un Martin dur et empêche les lots perdants. Mais la rentabilité baissait aussi...

 
réponse à ma précédente, je ne comprends pas ce qui ne va pas là =(
Raison: