Вот что я получаю, когда пробую режим мультитаймфрейма (индикатор из поста выше).
ВНИМАНИЕ: Видео должно быть перезагружено
ВНИМАНИЕ: Видео должно быть перезагружено
Насколько я вижу, все работает так, как и должно работать
Mladen
Я прошу прощения за то, что не представил свою проблему с ясностью. Вы правы в том, что diff_Levelms 0.0 работает правильно, но добавление diff_Levelms было сделано для того, чтобы позволить незначительным изменениям, таким как диапазон, быть отброшенными, например, .0002 для EURUSD или .02 для USDJPY. Очевидно, мой расчет diff не используется расчетом trend1.
если (ma1[i]>ma2[i]) trendfm[i] =1; если (ma1[i]<ma2[i]) trendfm[i] =-1; если (ma1[i]>ma3[i]) trendfs[i] =1; если (ma1[i]<ma3[i]) trendfs[i] =-1; if (ma2[i]>ma3[i] && diffums > diff_Levelms) trendms[i] =1; не используется для расчета тренда1 if (ma2[i]<ma3[i] && diffdms > diff_Levelms) trendms[i] =-1; не используется при расчете тренда1
Мой друг написал этот советник на основе индикатора vertex, мы не смогли запустить бэктест после того, как он его создал. Пожалуйста, не могли бы вы помочь мне исправить ошибку, из-за которой он не может провести бэктест. но он требует много обновлений, как только он будет очищен.
Спасибо и смиренно благодарю
// ------------------------------------------------------------------------------------------------// ------------------------------------------------------------------------------------------------#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;
}
Я новичок на этом сайте, и я вижу ваши хорошие работы, продолжайте в том же духе, брат. Однако я хотел бы, чтобы вы помогли мне с кодированием индикатора в советник.
Все, что мне действительно нужно, это чтобы советник покупал или продавал, когда появляется сигнал.
Идея заключается в том, чтобы перейти на более высокий таймфрейм, 4-часовой tf и найти тренд рынка (просто чтобы знать тренд) и торговать на более низком tf (15-5 минут). Таким образом, если рынок короткий, мы торгуем только до смены тренда на более высоком таймфрейме.
mladen: Пожалуйста, прикрепите файл mq4 - так пользователи не смогут легко проверить его и тогда они не смогут вам помочь.
Загружено, пожалуйста, может ли кто-нибудь посмотреть на этот код, чтобы знать, почему он не может обратно проверить, результаты могут быть не выгодными, но я буду благодарен.
MECMAN: Загружено, пожалуйста, может ли кто-нибудь посмотреть на этот код, чтобы знать, почему он не может обратно протестировать, результаты могут быть не прибыльными, но я буду благодарен.
Он работает (при условии, что у вас есть индикатор "vertex_mod_3.01" в папке indicators).
Рэй
Попробуйте сейчас
Младен
По-прежнему никаких изменений. Можем ли мы попробовать еще раз?
Это все, что я сделал для 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);
если (diffu > diff_Level ) trend[i] = 1;
if (diffd > diff_Level ) trend[i] = -1;
Спасибо
Луч
Младен
По-прежнему никаких изменений. Можем ли мы попробовать еще раз?
Это все, что я сделал для 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);
если (diffu > diff_Level ) trend[i] = 1;
if (diffd > diff_Level ) trend[i] = -1;
Спасибо
Луч
Вот что я получаю, когда пробую режим мультитаймфрейма (индикатор из сообщения выше).
Насколько я вижу, все работает так, как и должно работать
Вот что я получаю, когда пробую режим мультитаймфрейма (индикатор из поста выше).
Mladen
Я прошу прощения за то, что не представил свою проблему с ясностью. Вы правы в том, что diff_Levelms 0.0 работает правильно, но добавление diff_Levelms было сделано для того, чтобы позволить незначительным изменениям, таким как диапазон, быть отброшенными, например, .0002 для EURUSD или .02 для USDJPY. Очевидно, мой расчет diff не используется расчетом trend1.
double diffums = (ma2[i]-ma3[i]); //med-slow Видимо мой расчет
double diffdms = (ma3[i]-ma2[i]);//slow - med Видимо, мой расчет
если (ma1[i]>ma2[i]) trendfm[i] =1;
если (ma1[i]<ma2[i]) trendfm[i] =-1;
если (ma1[i]>ma3[i]) trendfs[i] =1;
если (ma1[i]<ma3[i]) trendfs[i] =-1;
if (ma2[i]>ma3[i] && diffums > diff_Levelms) trendms[i] =1; не используется для расчета тренда1
if (ma2[i]<ma3[i] && diffdms > diff_Levelms) trendms[i] =-1; не используется при расчете тренда1
Спасибо
ray
индикатор не обновляется
Я скачал прилагаемый индикатор "Outsidebar Trendline V2", но по какой-то причине он не обновляется на
следующем баре/свече. При переключении таймфреймов он работает хорошо, но на следующем баре на этом таймфрейме уже нет.
Не мог бы кто-нибудь из ваших экспертов помочь, чтобы индикатор обновлялся и на следующих барах?
Большое спасибо
Lea
mladen,
Мой друг написал этот советник на основе индикатора vertex, мы не смогли запустить бэктест после того, как он его создал. Пожалуйста, не могли бы вы помочь мне исправить ошибку, из-за которой он не может провести бэктест. но он требует много обновлений, как только он будет очищен.
Спасибо и смиренно благодарю
А это продолжение
А это продолжение
ЭЙ, МЛАДЕН
Я новичок на этом сайте, и я вижу ваши хорошие работы, продолжайте в том же духе, брат. Однако я хотел бы, чтобы вы помогли мне с кодированием индикатора в советник.
Все, что мне действительно нужно, это чтобы советник покупал или продавал, когда появляется сигнал.
Идея заключается в том, чтобы перейти на более высокий таймфрейм, 4-часовой tf и найти тренд рынка (просто чтобы знать тренд) и торговать на более низком tf (15-5 минут). Таким образом, если рынок короткий, мы торгуем только до смены тренда на более высоком таймфрейме.
Заранее спасибо.
Пожалуйста, прикрепите файл mq4 - так пользователи не смогут легко проверить его и тогда они не смогут вам помочь.
Загружено, пожалуйста, может ли кто-нибудь посмотреть на этот код, чтобы знать, почему он не может обратно протестировать, результаты могут быть не прибыльными, но я буду благодарен.
Он работает (при условии, что у вас есть индикатор "vertex_mod_3.01" в папке indicators).