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

 
FoxUA:

Peut-être que je n'ai pas dit exactement ce que je voulais dire, j'ai besoin que la variable BalansEURUSD indique les profits ou les pertes en pourcentage "BalansEURUSD =5%", comme ceci

et ainsi de suite pour quelques paires supplémentaires, disons la livre et le dolmen.

une fois


C'est plus difficile, mais cela peut être calculé :

Pour un ordre de VENTE

profit=NormalizeDouble((OrderOpenPrice()-Ask)*MarketInfo("EURUSD",MODE_TICKVALUE)*OrderLots()/Point,2) ;

margin=NormalizeDouble(AccountFreeMargin()-AccountFreeMarginCheck("EURUSD",OP_SELL,OrderLots(),2) ;

pour BUY :

profit=NormalizeDouble((Bid-OrderOpenPrice())*MarketInfo("EURUSD",MODE_TICKVALUE)*OrderLots()/Point,2) ;

margin=NormalizeDouble(AccountFreeMargin()-AccountFreeMarginCheck("EURUSD",OP_BUY,OrderLots(),2) ;

ce sont les formules complètes pour calculer le profit de l'ordre + la marge pour cet ordre, la marge doit être prise en compte, parce que si l'ordre se ferme, la marge libérée sera ajoutée au solde, l'argent augmentera numériquement, mais le profit réel peut ne pas avoir été

 

Les gars, veuillez me conseiller sur la façon de déclencher un ordre en attente et d'en placer un autre ? ?????. J'ai essayé par le biais de la sélection d'ordre, mais cela ne fonctionne pas ........
après
type d'ordre == achat, // où le buystop était plus tôt
ouvrir un ordre en attente // (il ne s'ouvre pas)

 
VOLDEMAR:

Pouvez-vous me dire comment déclencher un ordre en attente et en placer un autre ? ?????. J'ai essayé de le faire par le biais de la sélection des commandes mais cela n'a pas fonctionné .........
après
type d'ordre == buy, // lorsque buy était précédemment bystop
ouvrir un ordre en attente // (ne s'ouvre pas)


Si c'est le cas, cela signifie que l'ordre en attente (qui a été défini plus tôt) est devenu négociable, alors placez l'ordre suivant (un autre ordre en attente dont vous avez besoin, par exemple : si l'ordre d'achat est sur le marché, alors placez un bystop, etc.) Je vous recommande de lire

sur le site alpari - formation forex - manuel du trader - autotrading MKL4 (panneau de gauche) - conseillers de trading - (orderselect, ordersend, opérateurs conditionnels, etc.)

http://www.alpari.ru/ru/school/textbook/autotrading/expert_advisors/ - concis et informatif...

 

J'essaie d'apprendre à programmer. Dites-moi, je soupçonne que la condition suivante n'est jamais satisfaite dans l'Expert Advisor

while (B*Point >zmm)
Comment("Difference value ", B) ;
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-stoploss*Point,Ask+TakeProfit*Point, "macd sample",16384,0,Green) ;

Comment le vérifier ? Quelles sont les méthodes disponibles ? Et est-ce possible lorsque les tics ne fonctionnent pas ?

 

Chers experts ! J'apprends à écrire une évaluation environnementale. Cela fonctionne, mais pas tout. Les blocs de modification et de fermeture des commandes ne fonctionnent pas. Je ne trouve pas la raison. Je demande de l'aide.

//+------------------------------------------------------------------+
//|                                                Monetny dvor1.mq4 |
//|                                                            fanat |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "fanat"
#property link      "http://www.metaquotes.net"

extern int TakeProfit=484; //
extern int StopLoss=89;    //
extern bool BStop=true;    //Включение безубытка
extern int Stop=90;        //            
//+------------------------------------------------------------
int start()
{//1
   
if(TakeProfit<10){Alert("Ошибка,Take слишком близко");return;}
if(StopLoss<10){Alert("Ошибка,StopLoss слишком близко");return;}
   
bool Buy=false;
bool Sell=false;
if(Close[0]>High[1])Buy=true;
if(Close[0]<Low[1])Sell=true;

int err;
int Order_Count[6];
int OP=-1;
ArrayInitialize(Order_Count,0);                             
         
for(int i=0;i<=OrdersTotal();i++)       //
  {//2                                   // Блок учета ордеров
   if(OrderSelect(i,SELECT_BY_POS)==true)//
    {//3                                 //
     Order_Count[OrderType()]++;         //
     if(OP!=-1)return(Order_Count[OP]);  //
    }//3
  }//2  
     if(OrdersTotal()>0)
      {//2
       if(BStop==true&&OrderOpenPrice()!=OrderStopLoss())                                                //Модификация ордеров
        {//3                                                                                             //
         if((OrderType()==0&&(Ask-OrderOpenPrice())>Stop)||(OrderType()==1&&(OrderOpenPrice()-Bid)>Stop))//
          {//4                                                                                           // 
           int ticket=OrderTicket();                                                                     // 
           double Price=OrderOpenPrice();                                                                //
           double SL=OrderOpenPrice();                                                                   //
           double TP=OrderTakeProfit();                                                                  //
           bool Ans=OrderModify(ticket,Price,SL,TP,0);                                                   //
           
           if(Ans==false){err=GetLastError();Alert(err);Sleep(500);return;}                              //Обработка ошибок
          }//4
        }//3
          
                                                                                                                                                                                                                                                                                                                                       // 
       if(OrderType()==1&&(Buy==true||Ask<OrderTakeProfit()||Bid>OrderStopLoss()))      //Условия закрытия ордеров Sell  
        {//3
         ticket=OrderTicket();                             //Закрытие ордеров Sell                                                                         
         double Lots=OrderLots();                          //
         OrderClose(ticket,Lots,Ask,4);                    //
         
         err=GetLastError();                               //Обработка ошибок 
         if(err>0){Alert(err);Sleep(500);return;}          //                                                                              
        }//3
                                                           
       if(OrderType()==0&&(Sell==true||Bid>OrderTakeProfit()||Ask<OrderStopLoss()))      //Условия закрытие ордеров Buy 
       {//3
         ticket=OrderTicket();                             //Закрытие ордеров Buy                   
         Lots=OrderLots();                                 //  
         OrderClose(ticket,Lots,Bid,4);                    //
          
         err=GetLastError();                               //Обработка ошибок
         if(err>0){Alert(err);Sleep(500);return;}          //
       }//3
      }//2 
                   
   if(Buy==false&&Sell==false)return;
   int Total=1;
   double Lot=0.03;                 
/*  if(AccountBalance()>400)Lot=0.04;          //
   if(AccountBalance()>500)Lot=0.05;          //
   if(AccountBalance()>600)Total=2;           //
   if(AccountBalance()>800)Lot=0.04;Total=2;  // Блок вычисления лота для реала
   if(AccountBalance()>1000)Lot=0.05;Total=2; //
   if(AccountBalance()>1200)Lot=0.04;Total=3; //
   if(AccountBalance()>1500)Lot=0.05;Total=3; //
   if(AccountBalance()>1600)Lot=0.04;Total=4; //
   if(AccountBalance()>1800)Lot=0.03;Total=6;*/ //
   
   Lot=0.1;
   if(AccountBalance()>1600)Lot=0.2;
   if(AccountBalance()>2400)Lot=0.3;
                                                                                      
   if(Order_Count[OP_BUY]<Total&&Order_Count[OP_SELL]==0&&Buy==true)                     //Открытие ордеров Buy
   {//2                                                                                  //
      OrderSend(Symbol(), OP_BUY, Lot, Ask, 4, Ask-StopLoss*Point, Ask+TakeProfit*Point);//
       
      err=GetLastError();                                                                //Обработка ошибок
      if(err>0){Alert(err);Sleep(500);}                                                  //
      return;
   }//2         
           
   if(Order_Count[OP_SELL]<Total&&Order_Count[OP_BUY]==0&&Sell==true)                     //Открытие ордеров Sell 
   {//2                                                                                   //
      OrderSend(Symbol(), OP_SELL, Lot, Bid, 4, Bid+StopLoss*Point, Bid-TakeProfit*Point);//
      
      err=GetLastError();                                                                 //Обработка ошибок
      if(err>0){Alert(err);Sleep(500);}                                                   //
   }//2
  
return;
}//1

Je demande de l'aide.

 
fanat:

Chers experts ! J'apprends à écrire une évaluation environnementale. Cela fonctionne, mais pas tout. Les blocs de modification et de fermeture des commandes ne fonctionnent pas. Je ne trouve pas la raison. Je demande de l'aide.

Je demande de l'aide.


Il est peut-être temps de se familiariser avec les fonctions.
 

Voici le problème :

MathSrand(TimeLocal()) ;

int periodRandom=period+ MathRand()/10000 ;
int period2Random=period2+ MathRand()/10000 ;

Moving1=iMA(Symbol(),0,periodRandom,0,MODE_SMA,price,1) ;

Moving2=iMA(Symbol(),0,period2Random,0,MODE_SMA,price,1) ;

J'ai décidé de changer aléatoirement la période de l'ondulation - période plus une valeur aléatoire de 0 à 3.

Mais dans le testeur, l'exécution montre toujours la même valeur de profit. Peut-être que la période ne change pas, qu'est-ce que j'ai mal enregistré ?

 

Bonjour, la question est simple : est-il possible de définir la deuxième dimension d'un tableau à deux dimensions sans passer par une constante ?

C'est-à-dire que je devrais faire ainsi : double massiv[5][5], mais je veux double massiv[5][k], où k est un entier connu, défini précédemment, par exemple, par extern int k = 5. La première dimension peut être modifiée avec la fonction ArrayResize, mais la seconde ne peut pas être modifiée pour une raison quelconque...

 
fru1t:

Bonjour, ma question est simple : est-il possible de spécifier d'une manière ou d'une autre la deuxième dimension d'un tableau à deux dimensions autrement que par une constante ?

C'est-à-dire que je devrais faire ainsi : double massiv[5][5], mais je veux double massiv[5][k], où k est un entier connu, défini précédemment, par exemple, par extern int k = 5. La première dimension peut être modifiée avec la fonction ArrayResize, mais la seconde ne peut pas être modifiée pour une raison quelconque...


#define k 5

https://docs.mql4.com/ru/basis/preprosessor/constant

 

Bonjour les experts.

Veuillez expliquer comment supprimer les informations de la sous-fenêtre des indicateurs en haut à gauche.

C'est dans le chemin.

Raison: