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
¿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.
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_windowexternint NumberOfDays = 50;
externstring AsiaBegin = "10:00";
externstring AsiaEnd = "18:00";
externcolor 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(
conststring name="Rectangle", // имя прямоугольникаconstcolor clr=clrRed, // цвет прямоугольникаconstlong chart_ID=0, // ID графикаconstint sub_window=0, // номер подокнаdatetime time1=0, // время первой точкиdouble price1=0, // цена первой точкиdatetime time2=0, // время второй точкиdouble price2=0, // цена второй точкиconstENUM_LINE_STYLE style=STYLE_SOLID, // стиль линий прямоугольникаconstint width=2, // толщина линий прямоугольникаconstbool fill=false, // заливка прямоугольника цветомconstbool back=false, // на заднем планеconstbool selection=false, // выделить для перемещенийconstbool hidden=true, // скрыт в списке объектовconstlong 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.
externint TakeProfit = 100.0;
externbool AllPositions = True; // Управлять всеми позициямиexternbool ProfitTrailing = True; // Тралить только профитexternint TrailingStop = 50; // Фиксированный размер тралаexternint TrailingStep = 0; // Шаг тралаexternbool UseSound = False; // Использовать звуковой сигналexternstring 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);
}
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)
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.
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
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.
Mira en e-News-Lucky$.mq4.
Mira el método de selección del tamaño de la posición fija-proporcional (R. Jones) - MQL4 y MetaTrader 4 - MQL4 Algo-Traders Forum - Page 3 (mql5.com)
Mira en e-News-Lucky$.mq4.
Mira el método de selección del tamaño de la posición fijo-proporcional (R. Jones) - MQL4 y MetaTrader 4 - MQL4 Algo-Trader Forum - Page 3 (mql5.com)
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
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.