[Archive] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 2. - page 55

 
Je suis à la recherche d'un UMPC pour mon travail de jour. Pourriez-vous me dire si MT4 fonctionnera sur un netbook tel que celui-ci http://cgi.ebay.com/4-8-TOUCH-LCD-BenQ-S6-HSDPA-UMPC-3G-NETBOOK-XP-/190490113552?pt=Laptops_Nov05&hash=item2c5a187610#ht_15003wt_1139. Il y a trop de photos à faire, j'ai donc fourni un lien.
 
afirius:
Je cherche un UMPC pour mon travail de jour. Pouvez-vous me dire si MT4 fonctionnera sur ce netbook ? https://www.mql5.com/go?link=https://www.ebay.com/itm/4-8-TOUCH-LCD-BenQ-S6-HSDPA-UMPC-3G-NETBOOK-XP-/190490113552?hash=item2c5a187610&pt=Laptops_Nov05[hash]ht_15003wt_1139 Image trop grande, j'ai donc fourni un lien.

Oui
 
Sergstuddek:
Bonjour. Veuillez écrire le code permettant d'ouvrir un ordre en attente (stop) par rapport à un ordre déjà ouvert (dernier).


Eh bien, c'est un classique. :)

Le code devrait ressembler à ceci :

S'il y a un ordre ouvert, nous calculons son prix de fixation. Ensuite, nous devons ajouter une certaine distance à ce prix (elle peut être négative) - nous obtenons le niveau où l'ordre en attente sera fixé. Ensuite, nous vérifions s'il n'y a pas d'ordre en attente et si la distance à l'ordre en attente est supérieure ou égale au niveau minimal autorisé, nous plaçons l'ordre en attente sur ce niveau. C'est ici. Le code devrait ressembler à ceci.

Votre demande est-elle satisfaite ?

 
Est-il possible d'introduire les paramètres d'optimisation souhaités dans le testeur MT4 par un fichier texte ou autre ?
 
Sergey_Rogozin:
Est-il possible d'introduire les paramètres d'optimisation souhaités dans le testeur MT4 à l'aide d'un fichier texte ou autre ?
Recherche d'un auto-optimiseur dans la base de code
 

Je connais bien cet article, j'ai essayé de lancer l'auto-optimiseur, mais cela n'a pas fonctionné pour moi.

Je n'ai pas assez de connaissances.

J'ai besoin de quelque chose de plus simple.

Néanmoins, je vous remercie.

 
drknn:


C'est un classique. :)

Le code de programmation devrait ressembler à ceci :

S'il y a un ordre ouvert, calculez son prix de fixation. Ensuite, nous devons ajouter une certaine distance à ce prix (elle peut être négative) - nous obtenons le niveau auquel l'ordre en attente est fixé. Ensuite, nous vérifions s'il n'y a pas d'ordre en attente et si la distance à l'ordre en attente est supérieure ou égale au niveau minimal autorisé, nous plaçons l'ordre en attente sur ce niveau. C'est ici. Le code devrait ressembler à ceci.

Satisfait ?

+10 Bonne canne à pêche... :)

Maintenant, il y a deux évolutions possibles : la personne va écrire du code en utilisant cet algorithme, en posant des questions sur le cas, ou bien elle va faire remarquer que ce n'est pas un code, mais un algorithme et attendre une solution toute faite... :)

 
sergeev:

Vous avez besoin d'un ordre bystop/slestop en attente.

Ou bien avez-vous besoin d'un stop loss dans un ordre existant ?


Première option : un ordre bystop/sllestop en attente.

Veuillez écrire un code de base comme un modèle pour que je puisse le voir et le comprendre.

 
drknn:


C'est un classique. :)

Le code de programmation devrait ressembler à ceci :

S'il existe un ordre ouvert, calculez son prix de fixation. Ensuite, nous devons ajouter une certaine distance à ce prix (elle peut être négative) - nous obtenons le niveau auquel l'ordre en attente est fixé. Ensuite, nous vérifions s'il n'y a pas d'ordre en attente et si la distance à l'ordre en attente est supérieure ou égale au niveau minimal autorisé, nous plaçons l'ordre en attente sur ce niveau. C'est ici. Le code devrait ressembler à ceci.

Votre demande est-elle satisfaite ?


La classe, c'est bien, mais il y a toujours un problème)))

En théorie, je le comprends mais en pratique, je ne peux pas le faire. Peut-être pouvez-vous regarder mon code et me dire ce qui ne va pas.

#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
// Суть советника в том что сначала он открывает первый ордер на покупку
// затем выставляет стопы в две стороны
// в одну сторону как продолжене уже открытого ордера
// в другую в два раза больше в случае разворота графика
// стопы выставляются по отношению к последнему открытому советником ордеру
// с каждым новым открытием нового отложеного ордера, все старые удаляються
// а ноые отложеные стопы уже открываются относительно нового открытого ордера.
#define MAGIC  20101012
extern double Lot=1;            // Размер лота
extern int TP=0;                // Тейкпрофит
extern int SL=0;                // СтопЛосс
extern int DS=0;                // Дистанция  для открытия ордера в противоположну сторону
int buys=0,sells=0;
int i=0;
//-----------------------------------------------------
void DeleteStopOrders()
{
  int res;
  for(int i=0;i<OrdersTotal();i++)
  {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
    if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC)
    {
      if(OrderType()==OP_SELLSTOP)
        res=OrderDelete(OrderTicket());
      if(OrderType()==OP_BUYSTOP)
        res=OrderDelete(OrderTicket());
     }
  }
}
        
void OpenBuy()
    
   {
   int tickbuy2  =OrderSend(Symbol (), OP_BUY, Lot,  NormalizeDouble(Ask,Digits), 5, Ask-SL*Point,Ask+TP*Point, NULL, MAGIC, 0, Green); // покупка первого ордера при запуске советника
   }
//+------------------------------------------------------------------+
//| считаем количество открытых ордеров                              |
//+------------------------------------------------------------------+
int CalculateCurrentOrders1(string symbol)
{
   int buys=0,sells=0;
//----
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC)
        {
         if(OrderType()==OP_BUY)  buys++;
         if(OrderType()==OP_SELL) sells++;
        }
     }
//---- return orders volume
   return(buys+sells);   
}
//+------------------------------------------------------------------+
//| считаем количество отложеных ордеров                              |
//+------------------------------------------------------------------+
int CalculateCurrentOrders2(string symbol)
{
   int buys=0,sells=0;
//----
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC)
        {
         if(OrderType()==OP_BUYSTOP)  buys++;
         if(OrderType()==OP_SELLSTOP) sells++;
        }
     }
//---- return orders volume
   return(buys+sells);   
}

int OpenStops()

{for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderType()==OP_BUY)   // Проверка на то что открытый ордер на покупку
int ticket;
double LotSize=OrderLots();                                                                                 // Размер лота открытого ордера
double OpenPrice=OrderOpenPrice();                                                                          // Цена открытия открытого ордера
ticket=OrderSend(Symbol(),OP_SELLSTOP,LotSize*2,OpenPrice-DS*Point,0,SL*Point,TP*Point,"",MAGIC,0,Red);            // Открытие отложки на продажу в противополжну сторону до открытого ордера   
ticket=OrderSend(Symbol(),OP_BUYSTOP,Lot,OpenPrice+TP*Point,0,SL*Point,TP*Point,"",MAGIC,0,Blue);                  // Открытие отложки на покупку в сторону продолжения до открытого ордера

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderType()==OP_SELL)  // Проверка на то что открытый ордер на продажу
ticket=OrderSend(Symbol(),OP_SELLSTOP,Lot,OpenPrice-TP*Point,0,SL*Point,TP*Point,"",MAGIC,0,Red);                  // Открытие отложки на покупку в сторону продолжения до открытого ордера
ticket=OrderSend(Symbol(),OP_BUYSTOP,LotSize*2,OpenPrice+DS*Point,0,SL*Point,TP*Point,"",MAGIC,0,Blue);            // Открытие отложки на покупку в противополжну сторону до открытого ордера
}
}
  
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
  if (CalculateCurrentOrders1(Symbol())==0)
   OpenBuy();
  if (CalculateCurrentOrders2(Symbol())<=1)
  DeleteStopOrders();
  if (CalculateCurrentOrders2(Symbol())<=1)
   OpenStops();
//----
   return(0);
Je comprends qu'il s'agit d'un EA simple, mais je ne fais que commencer mon parcours)))) et j'ai déjà un problème
 

Question sur l'indicateur.

L'indicateur est un indicateur en croix. Il attire beaucoup de flèches d'un côté, puis beaucoup de l'autre. Comment faire en sorte que seuls les premiers soient tirés au sort. J'ai essayé de le faire de la manière indiquée dans le code, mais cela change lorsque je change de cadre.

Veuillez me conseiller sur la manière de procéder correctement.

 for(int i=limit-1;i>=0;i--)
   {      
         if ( s == 0 &&    условие продажи)
               {Продажа[i] = High[i]+point*Point;            
                s=1; b=0;}               
      
         if (b == 0 &&     условие покупки)
        
          
              {Покупка[i] = Low[i]-point*Point; 
               s=0; b=1;}
   }
Raison: