Escribir EAs gratuitos - página 10

 
Konstantin Bystrov:
Hola a todos. que puede escribir un indicador en mt4, de modo que las sesiones de negociación activa (se puede establecer de 10-18) se mostraron en forma de velas japonesas

ok

 

¡Buenas tardes!

¿Hay algún artesano aquí que podría escribir un EA basado en un indicador informativo de la fuerza de la moneda. El algoritmo es el siguiente. Estamos esperando que aparezca la moneda fuerte y la débil. En el ejemplo de la captura de pantalla, se trata de EUR y USD. Si la diferencia es significativa (a establecer en los parámetros del EA), entonces abrimos una posición. En el ejemplo de la captura de pantalla, hay que entrar en una venta, que haré el lunes. En el EA, tenemos que establecer el parámetro de marco de tiempo, de la que el EA debe tomar la señal (diferencia de fuerza de las diferentes monedas). La diferencia de fuerza de la moneda es la señal. El Stop Loss no es necesario. Es necesario tomar ganancias. Si el precio va en nuestra contra, hagamos la media. En nuestro Asesor Experto, prescribimos el paso de promedio, el número de órdenes, el número mágico, el tamaño del lote inicial, el factor de incremento del lote. He estado operando con este método recientemente; estoy muy satisfecho. Para mi percepción es un grial.

Archivos adjuntos:
 
Konstantin Bystrov:
Hola a todos. ¿se puede escribir un indicador en mt4, para mostrar las sesiones de negociación activa (se puede establecer el tiempo de 10-18) en forma de velas japonesas
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
#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));
  }
//+------------------------------------------------------------------+


 

Hola Queridos gurús de la programación, os pido ayuda para terminar este robot.

Yo no soy programador, este robot está montado por mí mismo a partir de varias piezas encontradas en Internet, pero no puedo adjuntar las dos funciones restantes que me gustaría ver. Por favor, ayúdame. Creo que para ti no será tan difícil como para mí. Si quieres ayudar, por favor haz una función que cierre la orden pendiente después de que una de las dos órdenes pendientes se haya disparado. Y la segunda función debería aumentar automáticamente un lote de la orden ("supongamos" que por cada $50 de saldo 0,01 lote, al llegar a $100 el robot aumentará automáticamente un lote en 0,02). Gracias de antemano por su ayuda.

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:


Gracias por el indicador, recomiendo los servicios de Iurii Tokman a todo el mundo:
 
Gracias querida gss por tu interés en mi petición. Esta es la razón por la que decidí dirigirme al gurú del MQL4. El código que he puesto funciona, lo he recogido de varios Expert Advisors, o más bien de uno de ellos, he cogido sólo la función Trailing Stop. El resto me lo he inventado yo (en cuanto a los pedidos pendientes). Me gustaría pedirle a usted y a otros gurús que echen un vistazo a mi código y que añadan dos funciones más a este robot, si no les importa.
1) Para eliminar una orden pendiente cuando una de ellas se dispara.
2) Aumento automático del lote (por cada 50$ 0,01 es decir, por 100$ será 0,02)
Gracias de antemano.

 

Hola a todos, mirad mi idea para un indicador, para no hacer spam en todos los posts, aquí está el enlace

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

Напишу советник бесплатно
Напишу советник бесплатно
  • 2021.05.08
  • www.mql5.com
если у вас есть хороая стратегия, и вы готовы ей поделиться,могу написать советника. приглашаю обсудить публично...
 
¿Quién puede escribir un simple EA?
Al colocar ambas órdenes de compra y venta, en cuanto una de ellas se cierra, se abren las mismas órdenes con el mismo lote de compra y venta, etc.
 
Esdecir, si hay una diferencia en las liquidaciones o bahías siempre debe haber una orden pendiente para una diferencia de, por ejemplo, 13 pips.

esdecir,si la operación está en beneficio, es decir, la orden avanza --- es decir, en caso de movimiento inverso el bloqueo será positivo.

2.En el caso de la apertura de cualquier parte del cierre, una orden de la diferencia debe ser colocado.

parece ser todo. Una vez más --- el Asesor de Expertos no debe cerrar por sí mismosin ningún botón adicional en el gráfico.