Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1372

 
DanilaMactep:

Bon après-midi à tous.

Essayez

//--ТРАЛ ПО ПАРАбОЛИКУ
void Tral_parabolik()
{ // НАЧАЛО ТРАЛ ПО ПАРАБОЛИК
//+------------------------------------------------------------------+
   int    Tral = tral;
   double Sar  = iCustom(_Symbol,PeriodForWork_tral_parabolik,"Parabolic",step_tral_parabolik,max_tral_parabolik,1);
//+------------------------------------------------------------------+
   for(int pos=0;pos<OrdersTotal();pos++)
     {
      if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES))
      if(OrderSymbol()==_Symbol)
        {
         if(OrderType()==OP_SELL)
           {
            if(OrderOpenPrice()>Ask+Tral*Point&&OrderOpenPrice()>Sar)
              {
               if(OrderStopLoss()!= Sar&&Sar>Ask)
                 {
                  if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Sar,Digits),OrderTakeProfit(),0,clrBlack))
                    {
                     Print("Order SELL Modify",GetLastError());
                    }
                 }
              }
           }
         if(OrderType()==OP_BUY)
           {
            if(OrderOpenPrice()<Bid-Tral*Point&&OrderOpenPrice()<Sar)
              {
               if(OrderStopLoss()!= Sar&&Sar<Bid)
                 {
                  if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Sar,Digits),OrderTakeProfit(),0,clrGreen))
                    {
                     Print("Order BUY Modify",GetLastError());
                    }
                 }
              }
           }
        }
     }
   if (GetLastError()==141){Alert(GetLastError()); ExpertRemove();}// ПРОВЕРКА ОТ ДОЛБАНИЯ СЕРВЕРА И БАНА СЧЁТА
} // КОНЕЦ ТРАЛ ПО ПАРАБОЛИК     
 
Сергей Дыбленко:
Merci pour toute l'aide apportée, mais mon cerveau n'est pas suffisant pour faire ce dont j'ai besoin !

je veux dire comme ceci ? seulement ici le lot est augmenté lorsque les positions sont déficitaires - et vous, je suppose, avez besoin d'augmenter lorsque les positions sont excédentaires ?

Photo par

.................................................................................................................................................................................................

//+------------------------------------------------------------------+
//|                                               Moving Average.mq4 |
//|                   Copyright 2005-2014, MetaQuotes Software Corp. |
//|                                              http://www.mql4.com |
//+------------------------------------------------------------------+
#property copyright   "2005-2014, MetaQuotes Software Corp."
#property link        "http://www.mql4.com"
#property description "Moving Average sample expert advisor"

#define  MAGICMA  20131111
//--- Inputs
input string   t0="------------ Exchange TP SL --------"; //
input double   InpTProfit       = 10;            // Exchange TP
input double   InpStopLoss      = 1000000;       // Exchange SL
input string   t1="------------ Lots Parameters -------"; //
input double   InpLots1         = 0.01;          // : Lots 1
input int      InpLots_01       = 2;             // Exchange Lots
input double   InpLots2         = 0.03;          // : Lots 2
input int      InpLots_02       = 4;             // Exchange Lots
input double   InpLots3         = 0.06;          // : Lots 3
input int      InpLots_03       = 8;             // Exchange Lots
input double   InpLots4         = 0.12;          // : Lots 4
input string   t2="------------ Moving Parameters -----"; //
input int      MovingPeriod     = 12;            // MovingPeriod
input int      MovingShift      = 6;             // MovingShift
//+------------------------------------------------------------------+
//| Calculate open positions                                         |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
  {
   int buys=0,sells=0;
//---
   for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         continue;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
        {
         if(OrderType()==OP_BUY)
            buys++;
         if(OrderType()==OP_SELL)
            sells++;
        }
     }
//--- return orders volume
   if(buys>0)
      return(buys);
   else
      return(-sells);
  }
//+------------------------------------------------------------------+
//| Calculate optimal lot size                                       |
//+------------------------------------------------------------------+
double OptimizedBuy(void)
  {
   double PROFIT_BUY=0.00;
   for(int i=OrdersTotal()-1; i>=0; i--) // returns the number of open positions
     {
      if(OrderSelect(i,SELECT_BY_POS) && OrderSymbol()==Symbol())
        {
         if(OrderSymbol()==Symbol() && OrderType()==OP_BUY)
           {
            PROFIT_BUY=PROFIT_BUY+NormalizeDouble(OrderProfit(),2);
           }
        }
     }
   double Lots=InpLots1;
   double ab=PROFIT_BUY;
   if(ab<-1 && ab>=-InpLots_01)
      Lots=InpLots1;
   if(ab<-InpLots_01 && ab>=-InpLots_02)
      Lots=InpLots2;
   if(ab<-InpLots_02 && ab>=-InpLots_03)
      Lots=InpLots3;
   if(ab<-InpLots_03)
      Lots=InpLots4;
//--- return trading volume
   return(Lots);
  }
//+------------------------------------------------------------------+
//| Calculate optimal lot size                                       |
//+------------------------------------------------------------------+
double OptimizedSell(void)
  {
   double PROFIT_SELL=0.00;
   for(int i=OrdersTotal()-1; i>=0; i--) // returns the number of open positions
     {
      if(OrderSelect(i,SELECT_BY_POS) && OrderSymbol()==Symbol())
        {
         if(OrderSymbol()==Symbol() && OrderType()==OP_SELL)
           {
            PROFIT_SELL=PROFIT_SELL+NormalizeDouble(OrderProfit(),2);
           }
        }
     }
   double Lots=InpLots1;
   double ab=PROFIT_SELL;
   if(ab<-1 && ab>=-InpLots_01)
      Lots=InpLots1;
   if(ab<-InpLots_01 && ab>=-InpLots_02)
      Lots=InpLots2;
   if(ab<-InpLots_02 && ab>=-InpLots_03)
      Lots=InpLots3;
   if(ab<-InpLots_03)
      Lots=InpLots4;
//--- return trading volume
   return(Lots);
  }
//+------------------------------------------------------------------+
//| Check for long position closing                                  |
//+------------------------------------------------------------------+
bool ProfitOnTick(void)
  {
   bool res=false;
   double PROFIT_BUY=0.00;
   double PROFIT_SELL=0.00;
   for(int i=OrdersTotal()-1; i>=0; i--) // returns the number of open positions
     {
      if(OrderSelect(i,SELECT_BY_POS) && OrderSymbol()==Symbol())
        {
         if(OrderSymbol()==Symbol() && OrderType()==OP_BUY)
           {
            PROFIT_BUY=PROFIT_BUY+NormalizeDouble(OrderProfit(),2);
           }
         if(OrderSymbol()==Symbol() && OrderType()==OP_SELL)
           {
            PROFIT_SELL=PROFIT_SELL+NormalizeDouble(OrderProfit(),2);
           }
        }
     }
   int Close_ticketb=0;
   int totalb=OrdersTotal();
   int b = 0;
   for(b = totalb; b >=0; b--)
     {
      if(OrderSelect(b,SELECT_BY_POS) && OrderSymbol()==Symbol())
        {
         //OrderSelect(i,SELECT_BY_POS);
         if(OrderSymbol()==Symbol() && OrderType()==OP_BUY)
           {
            if(PROFIT_BUY<-InpStopLoss || PROFIT_BUY>=InpTProfit)
              {
               Close_ticketb = OrderClose(OrderTicket(),OrderLots(),MarketInfo(Symbol(),MODE_BID),5);
               PlaySound("ok.wav");
              }
           }
        }
      res=true;
     }
   int Close_tickets=0;
   int totals=OrdersTotal();
   int s = 0;
   for(s = totals; s >=0; s--)
     {
      if(OrderSelect(s,SELECT_BY_POS) && OrderSymbol()==Symbol())
        {
         if(OrderSymbol()==Symbol() && OrderType()==OP_SELL)
           {
            if(PROFIT_SELL<-InpStopLoss || PROFIT_SELL>=InpTProfit)
              {
               Close_tickets = OrderClose(OrderTicket(),OrderLots(),MarketInfo(Symbol(),MODE_ASK),5);
               PlaySound("ok.wav");
              }
           }
        }
      res=true;
     }
//--- result
   return(res);
  }
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
  {
   double ma;
   int    res;
//--- go trading only for first tiks of new bar
   if(Volume[0]>1)
      return;
//--- get Moving Average
   ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
//--- sell conditions
   if(Open[1]>ma && Close[1]<ma)
     {
      res=OrderSend(Symbol(),OP_SELL,OptimizedSell(),Bid,3,0,0,"",MAGICMA,0,Red);
      return;
     }
//--- buy conditions
   if(Open[1]<ma && Close[1]>ma)
     {
      res=OrderSend(Symbol(),OP_BUY,OptimizedBuy(),Ask,3,0,0,"",MAGICMA,0,Blue);
      return;
     }
//---
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false)
      return;
//--- calculate open orders by current symbol
   if(CalculateCurrentOrders(Symbol())==0)
      CheckForOpen();
   ProfitOnTick();
//---
  }
//+------------------------------------------------------------------+
 
SanAlex:

comme cela vous voulez dire ? seulement ici le lot est augmenté lorsque les positions sont déficitaires - et vous, si je comprends bien, avez besoin d'augmenter lorsque les positions sont excédentaires ?

.................................................................................................................................................................................................

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Tous les bénéfices dépendent de ces deux fonctions. Vous devez les configurer correctement et les confier à un bon conseiller expert.

input string   t0="------------ Exchange TP SL --------"; //
input double   InpTProfit       = 10;            // Exchange TP
input double   InpStopLoss      = 1000000;       // Exchange SL
input string   t1="------------ Lots Parameters -------"; //
input double   InpLots1         = 0.01;          // : Lots 1
input int      InpLots_01       = 2;             // Exchange Lots
input double   InpLots2         = 0.03;          // : Lots 2
input int      InpLots_02       = 4;             // Exchange Lots
input double   InpLots3         = 0.06;          // : Lots 3
input int      InpLots_03       = 8;             // Exchange Lots
input double   InpLots4         = 0.12;          // : Lots 4

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

et ceci est tiré de l'Expert ci-dessus - qui n'est qu'un exemple

Photo 2

 
SanAlex:

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

tout profit - dépend de ces deux fonctions . Il suffit de les configurer correctement et de les intégrer dans un conseiller expert normal.

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Et ceci est tiré de l'Expert ci-dessus - qui n'est qu'un exemple


Attention Sasha, ou tu vas construire un GRAAL )
 
MakarFX:
Attention Sasha, ou tu vas construire le Graal)

c'est ennuyeux de construire le Graal tout seul - c'est plus amusant de le construire ensemble ! !!

 

Besoin d'aide ! Comment créer un tableau pour iCustom afin de trouver la valeur la plus proche non égale à 0 ? MT4

 

Amis commerçants !

Comment combiner iLowest (la plus petite valeur dans x barres) et iAD (volume roll, qui bien sûr ne donne pas de données en pourcentage mais des données réelles en pips), on a besoin de la plus petite valeur dans x barres selon iAD. Merci. МТ4

Документация по MQL5: Доступ к таймсериям и индикаторам / iLowest
Документация по MQL5: Доступ к таймсериям и индикаторам / iLowest
  • www.mql5.com
iLowest - Доступ к таймсериям и индикаторам - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Порт-моне тв:

Amis commerçants !

Comment combiner iLowest (la plus petite valeur dans x barres) et iAD (volume roll, qui bien sûr ne donne pas de données en pourcentage mais des données réelles en pips), on a besoin de la plus petite valeur dans x barres selon iAD. Merci. MT4

Cet article est très utile pour vous.

Vous pouvez également consulter l'article de MakarFX,

Il y a une réponse à sa question.

Работа по Накоплению/Распределению и что из этого можно сделать
Работа по Накоплению/Распределению и что из этого можно сделать
  • www.mql5.com
Индикатор Накопления/Распределения A/D имеет одно интересное свойство - пробитие трендовой линии, построенной на графике данного индикатора с определённой долей вероятности говорит нам о скором пробое линии тренда на графике цены. Данная статья будет полезна и интересна людям, только начинающим программировать на MQL4, поэтому я постарался изложить всё в наиболее доступной для понимания форме и использовать самые простые конструкции построения кода.
 
Alekseu Fedotov:

Article utile

Vous pouvez également consulter l'article et MakarFX,

il y a une réponse à sa question.

Merci.
 
Bonjour. Pouvez-vous me dire si le retournement est toujours d'actualité ? Je ne me souviens pas de la dernière fois qu'il a été diffusé.