Écrire des EA gratuites - page 10

 
Konstantin Bystrov:
Bonjour à tous. Qui peut écrire un indicateur dans mt4, de sorte que les sessions de trading actives (peuvent être définies de 10 à 18) soient affichées sous forme de bougies japonaises.

ok

 

Bonjour !

Y a-t-il ici des artisans qui pourraient écrire un EA basé sur un indicateur informationnel de la force des devises. L'algorithme est le suivant. Nous attendons l'apparition de la monnaie forte et de la monnaie faible. Dans l'exemple de la capture d'écran, il s'agit d'EUR et d'USD. Si la différence est significative (à définir dans les paramètres de l'EA), alors nous ouvrons une position. Dans l'exemple de la capture d'écran, vous devez entrer dans une vente, ce que je ferai lundi. Dans l'EA, nous devons définir le paramètre de l'horizon temporel, à partir duquel l'EA doit prendre le signal (différence de force des différentes devises). La différence de force de la devise est le signal. Le Stop Loss n'est pas nécessaire. Le Take Profit est nécessaire. Si le prix va contre nous, faisons la moyenne. Dans votre conseiller expert, définissez l'étape de calcul de la moyenne, le nombre d'ordres, le nombre magique, la taille initiale du lot et le facteur d'augmentation du lot. J'ai récemment négocié avec cette méthode et j'en suis très satisfait. Pour moi, c'est un graal.

Dossiers :
 
Konstantin Bystrov:
Bonjour à tous. Pouvez-vous écrire un indicateur dans mt4, pour afficher les sessions de trading actives (vous pouvez définir le temps de 10-18) sous la forme de bougies japonaises.
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
#property copyright ""
#property link      ""

#property indicator_chart_window

extern int    NumberOfDays = 50;
extern string AsiaBegin    = "10:00";
extern string AsiaEnd      = "18:00";
extern color  AsiaColor    = Goldenrod;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void init()
  {
   DeleteObjects();
   for(int i=0; i<NumberOfDays; i++)
      CreateObjects("AS"+i, AsiaColor);
   Comment("");
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
void deinit()
  {
   DeleteObjects();
   Comment("");
  }
//+------------------------------------------------------------------+
bool CreateObjects(
   const string          name="Rectangle",  // имя прямоугольника
   const color           clr=clrRed,        // цвет прямоугольника
   const long            chart_ID=0,        // ID графика
   const int             sub_window=0,      // номер подокна
   datetime              time1=0,           // время первой точки
   double                price1=0,          // цена первой точки
   datetime              time2=0,           // время второй точки
   double                price2=0,          // цена второй точки
   const ENUM_LINE_STYLE style=STYLE_SOLID, // стиль линий прямоугольника
   const int             width=2,           // толщина линий прямоугольника
   const bool            fill=false,        // заливка прямоугольника цветом
   const bool            back=false,        // на заднем плане
   const bool            selection=false,    // выделить для перемещений
   const bool            hidden=true,       // скрыт в списке объектов
   const long            z_order=0)         // приоритет на нажатие мышью
  {
//--- сбросим значение ошибки
   ResetLastError();
//--- создадим прямоугольник по заданным координатам
   if(!ObjectCreate(chart_ID,name,OBJ_RECTANGLE,sub_window,time1,price1,time2,price2))
     {
      Print(__FUNCTION__,
            ": не удалось создать прямоугольник! Код ошибки = ",GetLastError());
      return(false);
     }
//--- установим цвет прямоугольника
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- установим стиль линий прямоугольника
   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- установим толщину линий прямоугольника
   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- включим (true) или отключим (false) режим заливки прямоугольника
   ObjectSetInteger(chart_ID,name,OBJPROP_FILL,fill);
//--- отобразим на переднем (false) или заднем (true) плане
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- включим (true) или отключим (false) режим выделения прямоугольника для перемещений
//--- при создании графического объекта функцией ObjectCreate, по умолчанию объект
//--- нельзя выделить и перемещать. Внутри же этого метода параметр selection
//--- по умолчанию равен true, что позволяет выделять и перемещать этот объект
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- установим приоритет на получение события нажатия мыши на графике
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- успешное выполнение
   return(true);
  }
//+------------------------------------------------------------------+
void DeleteObjects()
  {
   for(int i=0; i<NumberOfDays; i++)
      ObjectDelete("AS"+i);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
void start()
  {
   datetime dt=CurTime();

   for(int i=0; i<NumberOfDays; i++)
     {
      DrawObjects(dt, "AS"+i, AsiaBegin, AsiaEnd);
      dt=decDateTradeDay(dt);
      while(TimeDayOfWeek(dt)>5)
         dt=decDateTradeDay(dt);
     }
  }
//+------------------------------------------------------------------+
void DrawObjects(datetime dt, string no, string tb, string te)
  {
   datetime t1, t2;
   double   p1, p2;
   int      b1, b2;

   t1=StrToTime(TimeToStr(dt, TIME_DATE)+" "+tb);
   t2=StrToTime(TimeToStr(dt, TIME_DATE)+" "+te);

   if(!TimeDayOfWeek(t1))
      return;

   b1=iBarShift(NULL, 0, t1);
   b2=iBarShift(NULL, 0, t2);
   p1=High[Highest(NULL, 0, MODE_HIGH, b1-b2, b2)];
   p2=Low [Lowest(NULL, 0, MODE_LOW, b1-b2, b2)];
   ObjectSet(no, OBJPROP_TIME1, t1);
   ObjectSet(no, OBJPROP_PRICE1, p1);
   ObjectSet(no, OBJPROP_TIME2, t2);
   ObjectSet(no, OBJPROP_PRICE2, p2);
  }
//+------------------------------------------------------------------+
datetime decDateTradeDay(datetime dt)
  {
   int ty=TimeYear(dt);
   int tm=TimeMonth(dt);
   int td=TimeDay(dt);
   int th=TimeHour(dt);
   int ti=TimeMinute(dt);

   td--;
   if(td==0)
     {
      tm--;
      if(tm==0)
        {
         ty--;
         tm=12;
        }
      if(tm==1 || tm==3 || tm==5 || tm==7 || tm==8 || tm==10 || tm==12)
         td=31;
      if(tm==2)
         if(MathMod(ty, 4)==0)
            td=29;
         else
            td=28;
      if(tm==4 || tm==6 || tm==9 || tm==11)
         td=30;
     }
   return(StrToTime(ty+"."+tm+"."+td+" "+th+":"+ti));
  }
//+------------------------------------------------------------------+


 

Bonjour Chers gourous de la programmation, je vous demande de m'aider à terminer ce robot.

Je ne suis pas un programmeur, ce robot est assemblé par moi-même à partir de diverses pièces trouvées sur Internet, mais je ne peux pas attacher les deux fonctions restantes que j'aimerais voir. Aidez-moi, s'il vous plaît. Je pense que pour vous, ce ne sera pas aussi difficile que pour moi. Si vous souhaitez nous aider, veuillez créer une fonction qui ferme l'ordre en attente après le déclenchement de l'un des deux ordres en attente. Et la deuxième fonction devrait automatiquement augmenter un lot de l'ordre ("supposons" que pour chaque 50 $ de solde 0,01 lot, lorsque vous atteignez 100 $ le robot augmentera automatiquement un lot de 0,02). Merci d'avance pour votre aide.

extern int    TakeProfit     = 100.0;
extern bool   AllPositions   = True; // Управлять всеми позициями
extern bool   ProfitTrailing = True;  // Тралить только профит
extern int    TrailingStop   = 50;    // Фиксированный размер трала
extern int    TrailingStep   = 0;     // Шаг трала
extern bool   UseSound       = False;  // Использовать звуковой сигнал
extern string NameFileSound  = "expert.wav";  // Наименование звукового файла


void start() 
{
double TakeProfitLevelB;
double TakeProfitLevelS;
double BuyStart = Ask + 400*_Point;
double SellStart = Bid - 400*_Point;

TakeProfitLevelB = BuyStart + TakeProfit*Point;
TakeProfitLevelS = SellStart - TakeProfit*Point;

if (Open[1]==Close[1]&& OrdersTotal()==0)
{
int BuyTicket = OrderSend(Symbol(),OP_BUYSTOP,0.10,BuyStart,3,0,TakeProfitLevelB,NULL,0,0,Green);
int SellTicket = OrderSend(Symbol(),OP_SELLSTOP,0.10,SellStart,3,0,TakeProfitLevelS,NULL,0,0,Blue);
}
  for (int i=0; i<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (AllPositions || OrderSymbol()==Symbol()) {
        TrailingPositions();
      }
    }
  }
}

void TrailingPositions() 
{
  double pBid, pAsk, pp;

  pp = MarketInfo(OrderSymbol(), MODE_POINT);
  if (OrderType()==OP_BUY) {
    pBid = MarketInfo(OrderSymbol(), MODE_BID);
    if (!ProfitTrailing || (pBid-OrderOpenPrice())>TrailingStop*pp) {
      if (OrderStopLoss()<pBid-(TrailingStop+TrailingStep-1)*pp) {
        ModifyStopLoss(pBid-TrailingStop*pp);
        return;
      }
    }
  }
  if (OrderType()==OP_SELL) {
    pAsk = MarketInfo(OrderSymbol(), MODE_ASK);
    if (!ProfitTrailing || OrderOpenPrice()-pAsk>TrailingStop*pp) {
      if (OrderStopLoss()>pAsk+(TrailingStop+TrailingStep-1)*pp || OrderStopLoss()==0) {
        ModifyStopLoss(pAsk+TrailingStop*pp);
        return;
      }
    }
  }
}

void ModifyStopLoss(double ldStopLoss) 
{
  bool fm;

  fm=OrderModify(OrderTicket(),OrderOpenPrice(),ldStopLoss,OrderTakeProfit(),0,CLR_NONE);
  if (fm && UseSound) PlaySound(NameFileSound);
}
 
Фиксированно-пропорциональный метод выбора размера позиции (Р. Джонс)
Фиксированно-пропорциональный метод выбора размера позиции (Р. Джонс)
  • 2011.07.24
  • www.mql5.com
Когда-то давно читал книгу Р. Джонса, посвященную различным стратегиям управления капиталом (Биржевая игра. Сделай миллионы, играя числами...
 
 Iurii Tokman:


Merci pour l'indicateur, je recommande les services d'Iurii Tokman à tout le monde :
 
Merci cher gss pour l'intérêt que vous portez à ma demande. C'est la raison pour laquelle j'ai décidé de m'adresser au gourou de MQL4. Le code que j'ai posté fonctionne. Je l'ai construit avec l'aide de plusieurs Expert Advisors, ou pour être plus précis, j'ai utilisé uniquement la fonction Trailing Stop. Le reste, je l'ai inventé moi-même (concernant les commandes en cours). Je voudrais vous demander, ainsi qu'à d'autres gourous, de jeter un coup d'œil à mon code et d'ajouter deux fonctions supplémentaires à ce robot, si vous le voulez bien.
1) Pour supprimer un ordre en attente lorsque l'un d'entre eux se déclenche.
2) Augmentation automatique des lots (pour chaque 50$ 0.01 i.e. pour 100$ ce sera 0.02)
Merci d'avance.

 

Bonjour à tous, jetez un coup d'oeil à mon idée d'indicateur, afin de ne pas spammer tous les messages, voici le lien

https://www.mql5.com/ru/forum/35071/page144#comment_22289427

Напишу советник бесплатно
Напишу советник бесплатно
  • 2021.05.08
  • www.mql5.com
если у вас есть хороая стратегия, и вы готовы ей поделиться,могу написать советника. приглашаю обсудить публично...
 
Les gars qui peuvent écrire un EA simple?
Placer les deux ordres d'achat et de vente dès que l'un d'entre eux se ferme ouvre les mêmes ordres avec le même lot d'achat et de vente, etc.
 
Par exemple,s'il y a une différence dans les règlements ou les baies, il devrait toujours y avoir un ordre en attente pour une différence de disons 13 pips.

c'est-à-dire quesi la transaction est bénéficiaire, c'est-à-dire que l'ordre avance --- c'est-à-dire qu'en cas de mouvement inverse, le verrou sera positif.

Dans le cas de l'ouverture d'une partie du verrou, un ordre pour la différence doit être placé.

semble être tout. Encore une fois --- le conseiller expert ne devrait pas se fermer tout seulsans boutons supplémentaires sur le graphique.
Raison: