Esto es lo que obtengo cuando pruebo el modo multi time frame (el indicador del post anterior)
ATENCIÓN: El vídeo debe volver a cargarse
ATENCIÓN: El vídeo debe ser recargado
Por lo que veo, todo funciona como se supone que debe funcionar
Mladen
Me disculpo por no presentar mi problema con claridad. Tienes razón en que el diff_Levelms 0.0 funciona correctamente, pero la adición de diff_Levelms fue para permitir que los cambios menores, como los rangos, sean descartados como .0002 para el EURUSD o .02 para el USDJPY. Aparentemente mi cálculo de diff no está siendo utilizado por el cálculo de trend1
double diffums = (ma2[i]-ma3[i]); //med-slow Aparentemente mi cálculo double diffdms = (ma3[i]-ma2[i]); /slow- med Aparentemente micálculo
si (ma1[i]>ma2[i]) trendfm[i] =1; si (ma1[i]<ma2[i]) trendfm[i] =-1; si (ma1[i]>ma3[i]) trendfs[i] =1 si (ma1[i]<ma3[i]) trendfs[i] =-1; si (ma2[i]>ma3[i] && diffums > diff_Levelms) trendms[i] =1; no se utiliza para el cálculo de trend1 si (ma2[i]<ma3[i] && diffdms > diff_Levelms) trendms[i] =-1; no se utiliza en el cálculo de trend1
Mi amigo escribió este EA basado en el indicador de vértice, no hemos sido capaces de ejecutar un backtest después de que lo creó. Por favor puedes ayudarme a arreglar el error que impide que sea capaz de backrest. pero requiere mucha actualización una vez que se limpia
Gracias y humildemente apreciado
// ------------------------------------------------------------------------------------------------// ------------------------------------------------------------------------------------------------#include <stdlib.mqh>
#include <stderror.mqh>
#property copyright"reddevil"#property link""#property version"3.0";
// 19-09 minimum of 4 periods before the next order.// v1.2 check alternate timeframe for spike// v2.0 uses 3.01a indicator with alternate timeframe//v3.0 red crossing blue as entry// trailing after line cross// ------------------------------------------------------------------------------------------------// VARIABLES EXTERNAS// ------------------------------------------------------------------------------------------------//// check for candle externint magic = 668899;
string progName="VertexPro3";
string key = "vertex 3.0";
// Configurationexternstring CommonSettings = "---------------------------------------------";
externint user_slippage = 2;
externdouble max_spread = 3.0;
externint user_tp = 0; // min TPexternint user_sl = 50; // max SL//extern int AlternateTF = 30 ; // 30 minsexterndouble Entry_line =10; // 10 sell, -10 buy// extern double Entry_pips = 10; // from highest high or lowest lowexternstring TakeProfit_trigger ="------------------------------------------";
externint TPdefault_line =25;
externdouble BBvalue1 =10.0;
externint BBTP_line =15;
//extern bool DailyFilter=true;externbool NewsFilter=false;
externint MinsBeforeNews=1440;
externint MinsAfterNews=60;
externint maxOrders=3; //max 3externstring Trailing = "----------------------------------------------------";
externint UseTrailing=2 ; // 0 - no trailing, 1- normal; 2-trail after TP lineexternint TrailStartPips=8;
externint Trailpips=5;
externint TrailStepPips=3;
externstring MoneyManagementSettings = "---------------------------------------------";
// Money Managementexternbool money_management = false;
externdouble min_lots = 0.1;
externint risk=1;
externint progression = 0; // 0=none | 1:ascending | 2:martingaleexternint GMToffset=2;
int arrLgt=3;
int buy_magic[3];
int sell_magic[3];
int buy_tickets[3];
int sell_tickets[3];
// Lotsdouble buy_lots[3];
double sell_lots[3];
// Current Profitdouble buy_profit[3];
double sell_profit[3];
//SLdouble sell_sl[3];
double buy_sl[3];
//TPdouble sell_tp[3];
double buy_tp[3];
// Open Pricedouble buy_price[3];
double sell_price[3];
datetime buy_time; // last buytimedatetime sell_time;
// Indicatordouble rsi=0;
// Number of ordersint buys = 0;
int sells = 0;
double total_buy_profit=0,total_sell_profit=0;
double total_buy_lots=0, total_sell_lots=0;
double buy_max_profit=0, buy_close_profit=0;
double sell_max_profit=0, sell_close_profit=0;
// Indicator// ------------------------------------------------------------------------------------------------// VARIABLES GLOBALES// ------------------------------------------------------------------------------------------------// indicadores// Cantidad de ordenes;int orders = 0;
int direction= 0;
double max_profit=0, close_profit=0;
double last_order_profit=0, last_order_lots=0;
// Colorescolor c=Black;
// Cuentadouble balance, equity;
int slippage=0;
// OrderReliableint OldHist=0;
double SL,PT,_spread;
int newMagic1,newMagic2;
int curMagic;
int Tframe = PERIOD_H1;
datetime OldTime;
int _DSTtime=0;
int pendingTicket=-1;
bool NoNews=true;
int mBefore, mAfter;
// ------------------------------------------------------------------------------------------------// START//void init()
{
if (Digits==4 || Digits==2)
{
slippage = user_slippage;
PT=Point;
}
elseif (Digits==5 || Digits==3)
{
slippage = 10*user_slippage;
PT=Point*10;
}
if(maxOrders > 3) maxOrders=3;
newMagic1 = StrToInteger(IntegerToString(TPdefault_line) + IntegerToString(magic));
newMagic2 = StrToInteger(IntegerToString(BBTP_line) + IntegerToString(magic));
}
int start()
{
double point = MarketInfo(Symbol(), MODE_POINT);
double dd=0;
string DST = "Yes";
bool encontrada;
balance=AccountBalance();
equity=AccountEquity();
if(TimeCurrent() - OldTime > 25)
{
RefreshRates();
OldTime=TimeCurrent();
}
_spread = NormalizeDouble(MathAbs(Ask-Bid)/PT,2);
if(IsTradeAllowed() == false)
{
Comment("nTrade not allowed.");
return(0);
}
/*if(StringLen(DoubleToStr(TPdefault_line)) > 3 || StringLen(DoubleToStr(BBTP_line)) > 3)
{
Comment("nTPdefault or BBTP too long");
return(1);
} */if(BBTP_line > TPdefault_line)
{
Comment("nBBTP must be less than TPdefault");
return(1);
}
/*if(!IsTesting())
if (Period() != Tframe)
{
Comment("\n ERROR :: Invalid Timeframe, Please Switch to "+ IntegerToString(Tframe));
return(0);
} */if(TimeDaylightSavings()==0)
{
DST="No";
}
else _DSTtime=1;
if(!IsTesting())
{
//Comment(StringConcatenate("\nLSMA02a is running.\nNext order lots: ",CalcularVolumen(),"\nTake profit ($): ",CalcularVolumen()*10*user_tp,"\nStop loss ($): ",CalcularVolumen()*10*user_sl,"\nSpread: ",_spread, "\nDST: ",DST));Comment(StringConcatenate("\n",progName," is running.\nNext order lots: ",CalcularVolumen(),
"\nTake profit ($): ",CalcularVolumen()*10*user_tp,
"\nStop loss ($): ",CalcularVolumen()*10*user_sl,
"\nSpread: ",_spread,
"\nDST: ",DST,
"\nMax Orders: ",maxOrders,
// "\nDailyFilter ",DailyFilter,"\nNewsFilter: ",NewsFilter,
"\nMins Before News: ",mBefore,
"\nMins After News: ",mAfter));
}
// Actualizamos el estado actual
InitBuy();
InitSell();
UpdateVars();
encontrada=FALSE;
point = Point;
Robot();
return(0);
}
void InitBuy()
{
// Reset number of buy/sell orders
buys=0;
// Reset arraysfor(int i=0; i<arrLgt; i++)
{
buy_tickets[i] = 0;
buy_lots[i] = 0;
buy_profit[i] = 0;
buy_price[i] = 0;
buy_sl[i]=0;
buy_tp[i]=0;
buy_magic[i]=0;
}
}
void InitSell()
{
// Reset number of buy/sell orders
sells=0;
// Reset arraysfor(int i=0; i<arrLgt; i++)
{
sell_tickets[i] = 0;
sell_lots[i] = 0;
sell_profit[i] = 0;
sell_price[i] = 0;
sell_sl[i]=0;
sell_tp[i]=0;
sell_magic[i]=0;
}
}
void UpdateVars()
{
int aux_buys=0, aux_sells=0;
double aux_total_buy_profit=0, aux_total_sell_profit=0;
double aux_total_buy_lots=0, aux_total_sell_lots=0;
buy_time=0;
sell_time=0;
datetime oTime;
// We are going to introduce data from opened orders in arrays for(int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == true)
if(OrderSymbol() == Symbol() && (OrderMagicNumber() == newMagic1 ||OrderMagicNumber() == newMagic2) )
{
if( OrderType() == OP_BUY)
{
buy_tickets[aux_buys] = OrderTicket();
buy_lots[aux_buys] = OrderLots();
buy_profit[aux_buys] = OrderProfit()+OrderCommission()+OrderSwap();
buy_price[aux_buys] = OrderOpenPrice();
buy_sl[aux_buys] = OrderStopLoss();
buy_tp[aux_buys] = OrderTakeProfit();
aux_total_buy_profit = aux_total_buy_profit + buy_profit[aux_buys];
aux_total_buy_lots = aux_total_buy_lots + OrderLots();
oTime =OrderOpenTime();
buy_magic[aux_buys]=OrderMagicNumber();
if(oTime > buy_time)
buy_time = oTime;
aux_buys++;
}
elseif( OrderType() == OP_SELL)
{
sell_tickets[aux_sells] = OrderTicket();
sell_lots[aux_sells] = OrderLots();
sell_profit[aux_sells] = OrderProfit()+OrderCommission()+OrderSwap();
sell_price[aux_sells] = OrderOpenPrice();
sell_sl[aux_sells] = OrderStopLoss();
sell_tp[aux_sells] = OrderTakeProfit();
aux_total_sell_profit = aux_total_sell_profit + sell_profit[aux_sells];
aux_total_sell_lots = aux_total_sell_lots + OrderLots();
oTime =OrderOpenTime();
sell_magic[aux_sells]=OrderMagicNumber();
if(oTime > sell_time)
sell_time = oTime;
aux_sells++;
}
}
}
// Update global vars
buys = aux_buys;
sells = aux_sells;
total_buy_profit = aux_total_buy_profit;
total_sell_profit = aux_total_sell_profit;
total_buy_lots = aux_total_buy_lots;
total_sell_lots = aux_total_sell_lots;
}
Soy nuevo en este sitio web, y puedo ver sus buenos trabajos, sigue así hermano. Sin embargo, me gustaría que me pueda ayudar con un poco de codificación en la conversión de un indicador en un EA.
Todo lo que realmente necesito es que el EA para comprar o vender cuando aparece la señal.
La idea es ir a un marco de tiempo más alto, 4 horas tf y encontrar la tendencia del mercado (sólo para conocer la tendencia) y el comercio en tf inferior (15-5mins). Así que si es corto, sólo corto hasta el cambio de tendencia el marco de tiempo más alto.
mladen: Por favor, adjunte el archivo mq4 - de esta manera los usuarios no pueden probarlo fácilmente y luego no pueden ayudarle
Subido, por favor, ¿puede alguien mirar en este código para saber por qué no puede volver a la prueba, los resultados no pueden ser rentables, pero voy a estar agradecido
MECMAN: Subido, por favor, puede alguien mirar en este código para saber por qué no puede volver a la prueba, los resultados pueden no ser rentables, pero voy a estar agradecido
Funciona (siempre y cuando tenga el indicador "vertex_mod_3.01" en la carpeta de indicadores)
Ray
Pruébalo ahora
Mladen
Todavía no hay cambios. ¿Podemos probar de nuevo?
Esto es todo lo que hice para el 2MA;
double fastMA = iMA(NULL,0,FastMa,FastMaShift,FastMaMethod,FastMaPrice,i);
double slowMA = iMA(NULL,0,SlowMa,SlowMaShift,SlowMaMethod,SlowMaPrice,i);
UpH[i] = EMPTY_VALUE;
DnH[i] = EMPTY_VALUE;
trend[i] = trend[i+1];
double diffu = (fastMA - slowMA);
double diffd = (slowMA - fastMA);
si (diffu > diff_Level ) trend[i] = 1;
si (diffd > diff_Level ) trend[i] = -1;
Gracias
Rayo
Mladen
Todavía no hay cambios. ¿Podemos probar de nuevo?
Esto es todo lo que hice para el 2MA;
double fastMA = iMA(NULL,0,FastMa,FastMaShift,FastMaMethod,FastMaPrice,i);
double slowMA = iMA(NULL,0,SlowMa,SlowMaShift,SlowMaMethod,SlowMaPrice,i);
UpH[i] = EMPTY_VALUE;
DnH[i] = EMPTY_VALUE;
trend[i] = trend[i+1];
double diffu = (fastMA - slowMA);
double diffd = (slowMA - fastMA);
si (diffu > diff_Level ) trend[i] = 1;
si (diffd > diff_Level ) trend[i] = -1;
Gracias
Rayo
Esto es lo que obtengo cuando pruebo el modo multi time frame (el indicador del post anterior)
Por lo que veo, todo funciona como se supone que debe funcionar
Esto es lo que obtengo cuando pruebo el modo multi time frame (el indicador del post anterior)
Mladen
Me disculpo por no presentar mi problema con claridad. Tienes razón en que el diff_Levelms 0.0 funciona correctamente, pero la adición de diff_Levelms fue para permitir que los cambios menores, como los rangos, sean descartados como .0002 para el EURUSD o .02 para el USDJPY. Aparentemente mi cálculo de diff no está siendo utilizado por el cálculo de trend1
double diffums = (ma2[i]-ma3[i]); //med-slow Aparentemente mi cálculo
double diffdms = (ma3[i]-ma2[i]); /slow- med Aparentemente mi cálculo
si (ma1[i]>ma2[i]) trendfm[i] =1;
si (ma1[i]<ma2[i]) trendfm[i] =-1;
si (ma1[i]>ma3[i]) trendfs[i] =1
si (ma1[i]<ma3[i]) trendfs[i] =-1;
si (ma2[i]>ma3[i] && diffums > diff_Levelms) trendms[i] =1; no se utiliza para el cálculo de trend1
si (ma2[i]<ma3[i] && diffdms > diff_Levelms) trendms[i] =-1; no se utiliza en el cálculo de trend1
Gracias
ray
El indicador no se actualiza
He descargado el indicador "Outsidebar Trendline V2" adjunto, pero por alguna razón no se actualiza en
la siguiente barra/candela. Al cambiar de marco temporal funciona bien, pero en la siguiente barra en ese marco temporal ya no.
¿Podría algún experto de ustedes ayudar para que el indicador se actualice también en las siguientes barras?
Muchas gracias
Lea
mladen,
Mi amigo escribió este EA basado en el indicador de vértice, no hemos sido capaces de ejecutar un backtest después de que lo creó. Por favor puedes ayudarme a arreglar el error que impide que sea capaz de backrest. pero requiere mucha actualización una vez que se limpia
Gracias y humildemente apreciado
y esta es la continuacion
Y esta es la continuación
HEY MLADEN
Soy nuevo en este sitio web, y puedo ver sus buenos trabajos, sigue así hermano. Sin embargo, me gustaría que me pueda ayudar con un poco de codificación en la conversión de un indicador en un EA.
Todo lo que realmente necesito es que el EA para comprar o vender cuando aparece la señal.
La idea es ir a un marco de tiempo más alto, 4 horas tf y encontrar la tendencia del mercado (sólo para conocer la tendencia) y el comercio en tf inferior (15-5mins). Así que si es corto, sólo corto hasta el cambio de tendencia el marco de tiempo más alto.
Gracias por adelantado.
Por favor, adjunte el archivo mq4 - de esta manera los usuarios no pueden probarlo fácilmente y luego no pueden ayudarle
Subido, por favor, puede alguien mirar en este código para saber por qué no puede volver a la prueba, los resultados pueden no ser rentables, pero voy a estar agradecido
Funciona (siempre y cuando tenga el indicador "vertex_mod_3.01" en la carpeta de indicadores)