A1ex
~~~~~
_http://forum.mql4.com/ru/18465
Спасибо потестим.
_http://forum.mql4.com/ru/18465
Вот ещё один похож на стабильного,отчёт несколько завораживаетЭто какой же?
_http://forum.mql4.com/ru/18465
А самого советника нету?Вот ещё один похож на стабильного,отчёт несколько завораживает
Название эксперта в отчёте.
ДержиТам что то не понятно,- где советник,а где индикатор.
И что ,действительно,стабильно зарабатывает?
Там что то не понятно,- где советник,а где индикатор.
И что ,действительно,стабильно зарабатывает?
Резы с удаленных мной постов, где его пиарили как свой с намеком на продажу.
Он мне раньше на глаза попадался.
Вот резы, советник выше постом.
Вам решать, зарабатывает он или нет.
и еще один красивый бэктест. эти бэки ни о чем не говорят. абсолютно
Если внимательней прочитаешь мой пост, то поймёшь что я его даже не тестил.
Знакомые настройки попались на глаза, я ссылку и дал.
А тесты можешь выложить?Советник есть на сайте forexcapital это их авторская разработка,так что за советником надо туда двигать:-(,буду честен(пока что)к ним,не выкладывая его ,т.к. сам купил его,НО если их заверения (15-150% в месяц:questionне будут оправданы ОБЯЗАТЕЛЬНО выложу
Вот отчеты
правда по франку,видимо,котировки не качнул перед тестом,качество моделирования страдает
Вот,что заметил много сделок на больших (по всей видимости и резких )движухах,так что ДЦ надо такой где реквот меньше
Спасибоа форвард тесты когда вы нам покажите? хотя бы на демо?
от всей души желаю вам что бы они были такими же хорошими как и бэки
А тесты можешь выложить?
Спасибо
Поставил его на 2 ДЦ :4 и 5ти значные будут результаты заслуживающие внимания - выложу,судя по обилию сделок на бэктестах по фунту,ждать не долго осталось
Eto kopiya WOCA, ya tol'kochto sravnil kody...
Тесты хорощие но что-то напоминают. попробуй за последний месяц евро-бакс, возможен слив.Вот отчеты
правда по франку,видимо,котировки не качнул перед тестом,качество моделирования страдает
Вот,что заметил много сделок на больших (по всей видимости и резких )движухах,так что ДЦ надо такой где реквот меньше
int Get.Magic() {
string ls_0;
int l_str2int_8;
Sleep(1000);
while (true) {
MathSrand(TimeLocal());
ls_0 = StringConcatenate(ls_0, MathRand() / 15, MathRand() / 8, MathRand() / 32);
l_str2int_8 = MathRound(MathAbs(StrToInteger(ls_0)));
ls_0 = DoubleToStr(l_str2int_8, 10);
if (StringLen(ls_0) < 15) continue;
break;
}
l_str2int_8 = StrToInteger(ls_0);
return (MathRound(MathAbs(l_str2int_8)));
}
void openOrders() {
if (g_count_148 < g_count_152) {
Print("Нисходящий тренд");
if (TimeCurrent() - g_datetime_160 <= gd_108) {
RefreshRates();
for (int li_0 = 1; li_0 <= 2; li_0++) {
if (OrderSend(Symbol(), OP_SELL, GetLots(), Bid, 10, 0, 0, "Forexcapital SELL", g_magic_100, 0, Red) < 0) {
Print("Ошибка ", ErrorDescription(GetLastError()));
Print("Не удалось открыть ордер, новая попытка ", li_0);
Sleep(1000);
RefreshRates();
} else {
gi_172 = TRUE;
break;
}
}
}
} else {
Print("Восходящий тренд");
if (TimeCurrent() - g_datetime_156 <= gd_108) {
RefreshRates();
for (li_0 = 1; li_0 <= 2; li_0++) {
if (OrderSend(Symbol(), OP_BUY, GetLots(), Ask, 10, 0, 0, "Forexcapital BUY", g_magic_100, 0, Green) < 0) {
Print("Ошибка ", ErrorDescription(GetLastError()));
Print("Не удалось открыть ордер, новая попытка ", li_0);
Sleep(1000);
RefreshRates();
} else {
gi_172 = TRUE;
break;
}
}
}
}
g_str2dbl_176 = 0;
g_str2dbl_184 = 0;
g_count_148 = 0;
g_count_152 = 0;
gi_164 = FALSE;
gi_168 = FALSE;
g_datetime_156 = 0;
g_datetime_160 = 0;
}
int init() {
g_magic_100 = Get.Magic();
if (Digits == 3 || Digits == 5) gi_192 = 10;
else gi_192 = 1;
return (0);
}
int deinit() {
return (0);
}
int start() {
double l_str2dbl_0 = StrToDouble(DoubleToStr(Ask, 4));
double l_str2dbl_8 = StrToDouble(DoubleToStr(Bid, 4));
g_ord_total_140 = OrdersTotal();
int l_pos_20 = -1;
for (int l_pos_16 = 0; l_pos_16 < g_ord_total_140; l_pos_16++) {
OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol()) {
l_pos_20 = l_pos_16;
break;
}
}
if (l_pos_20 < 0) {
if (g_str2dbl_176 < l_str2dbl_0) {
g_count_148++;
g_str2dbl_176 = l_str2dbl_0;
if (gi_164 == FALSE) {
g_datetime_156 = TimeCurrent();
gi_164 = TRUE;
}
} else {
g_str2dbl_176 = 0;
g_count_148 = 0;
gi_164 = FALSE;
g_datetime_156 = 0;
}
if (g_str2dbl_184 > l_str2dbl_0) {
g_count_152++;
g_str2dbl_184 = l_str2dbl_0;
if (gi_168 == FALSE) {
g_datetime_160 = TimeCurrent();
gi_168 = TRUE;
}
} else {
g_str2dbl_184 = 0;
g_count_152 = 0;
gi_168 = FALSE;
g_datetime_160 = 0;
}
if (g_count_148 == gi_104 || g_count_152 == gi_104) openOrders();
if (g_str2dbl_176 == 0.0) g_str2dbl_176 = l_str2dbl_0;
if (g_str2dbl_184 == 0.0) g_str2dbl_184 = l_str2dbl_0;
} else {
OrderSelect(l_pos_20, SELECT_BY_POS, MODE_TRADES);
if (OrderType() == OP_BUY) {
if (gi_172 == TRUE) {
OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid - StartingStopLoss * Point * gi_192, Digits), 0, 0, Red);
gi_172 = FALSE;
}
if (Bid - OrderOpenPrice() > TrailingStop * Point * gi_192)
if (OrderStopLoss() < Bid - TrailingStop * Point * gi_192) OrderModify(OrderTicket(), OrderOpenPrice(), Bid - TrailingStop * Point * gi_192, 0, 0, Red);
}
if (OrderType() == OP_SELL) {
if (gi_172 == TRUE) {
OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask + StartingStopLoss * Point * gi_192, Digits), 0, 0, Red);
gi_172 = FALSE;
}
if (OrderOpenPrice() - Ask > TrailingStop * Point * gi_192)
if (OrderStopLoss() > Ask + TrailingStop * Point * gi_192) OrderModify(OrderTicket(), OrderOpenPrice(), Ask + TrailingStop * Point * gi_192, 0, 0, Red);
}
}
return (0);
}
double GetLots() {
return (GetLotSize());
}
double GetLotSize() {
int l_digits_0 = MarketInfo(OrderSymbol(), MODE_DIGITS);
double l_minlot_4 = MarketInfo(Symbol(), MODE_MINLOT);
double l_maxlot_12 = MarketInfo(Symbol(), MODE_MAXLOT);
double l_leverage_20 = AccountLeverage();
double l_lotsize_28 = MarketInfo(Symbol(), MODE_LOTSIZE);
double ld_ret_36 = MathMin(l_maxlot_12, MathMax(l_minlot_4, Lots));
if (LotsOptimized && Risk > 0.0 && AccountFreeMargin() > Ask * ld_ret_36 * l_lotsize_28 / l_leverage_20) ld_ret_36 = NormalizeDouble(AccountFreeMargin() * Risk / l_lotsize_28, l_digits_0);
else ld_ret_36 = l_minlot_4;
ld_ret_36 = MathMax(l_minlot_4, MathMin(l_maxlot_12, NormalizeDouble(ld_ret_36 / l_minlot_4, 0) * l_minlot_4));
if (ld_ret_36 > gd_116) ld_ret_36 = gd_116;
if (AccountFreeMargin() < Ask * ld_ret_36 * l_lotsize_28 / l_leverage_20) {
Print("Слишком маленький баланс. Лоты: ", ld_ret_36, " , Свободно: ", AccountFreeMargin());
Comment("Low Account Balance. Лоты: ", ld_ret_36, " , Свободно: ", AccountFreeMargin());
return;
}
return (ld_ret_36);
int Get.Magic()
{
string mag;
int Magic.g;
Sleep(1000);
while (true)
{
MathSrand (TimeLocal());
mag = StringConcatenate(mag, MathRand()/15, MathRand()/8, MathRand()/32);
Magic.g = MathRound(MathAbs(StrToInteger(mag)));
mag = DoubleToStr(Magic.g,10);
if (StringLen (mag) >= 15) {Magic.g = StrToInteger(mag); break;}
}
return (MathRound(MathAbs(Magic.g)));
}
void openOrders()
{
int try;
if(up < down)
{
Print("Параметр вниз - удовлетворяет условию");
if(TimeCurrent() - TimeSpeedDown <= timeSpeed)
{
Print("Параметр ВРЕМЯ - удовлетворяет условию");
RefreshRates();
for(try = 1; try <= 2; try++)
{
if (OrderSend(Symbol(),OP_SELL,GetLots(),Bid,10,0,0 ,"",Magic,0,Red) < 0)
{ Print("Ошибка ", ErrorDescription(GetLastError()));
Print("Невозможно открыть ордер, попытка ", try);
Sleep(1000);
RefreshRates();
}
else
{
OrderSal = true;
break;
}
}
}
}
else
{
Print("Параметр вверх - удовлетворяет условию");
if(TimeCurrent() - TimeSpeedUp <= timeSpeed)
{
Print("Параметр ВРЕМЯ - удовлетворяет условию");
RefreshRates();
for(try = 1; try <= 2; try++)
{
if (OrderSend(Symbol(),OP_BUY,GetLots(),Ask,10,0,0, "", Magic, 0, Green) < 0)
{ Print("Ошибка ", ErrorDescription(GetLastError()));
Print("Невозможно открыть ордер, попытка ", try);
Sleep(1000);
RefreshRates();
}
else
{
OrderSal = true;
break;
}
}
}
}
priceUp = 0;
priceDown = 0;
up = 0;
down = 0;
TimBoolUp = false;
TimBoolDown = false;
TimeSpeedUp = 0;
TimeSpeedDown = 0;
}
int init()
{
//Magic = Get.Magic();
if (Digits==3 || Digits==5)
PipMultiplier=10;
else PipMultiplier=1;
return(0);
}
int deinit()
{
return(0);
}
int start()
{
double ask = StrToDouble(DoubleToStr(Ask,Digi));
double bid = StrToDouble(DoubleToStr(Bid,Digi));
total = OrdersTotal();
int i, currentSymbolOrderPos = -1;
for (i = 0; i < total; i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol()&&OrderMagicNumber() == Magic)
{
currentSymbolOrderPos = i;
break;
}
}
if (currentSymbolOrderPos < 0)
{
if(priceUp < ask)
{
up = up + 1;
priceUp = ask;
if(TimBoolUp == false)
{
TimeSpeedUp = TimeCurrent();
TimBoolUp = true;
}
}
else
{
priceUp = 0;
up = 0;
TimBoolUp = false;
TimeSpeedUp = 0;
}
if(priceDown > ask)
{
down = down + 1;
priceDown = ask;
if(TimBoolDown == false)
{
TimeSpeedDown = TimeCurrent();
TimBoolDown = true;
}
}
else
{
priceDown = 0;
down = 0;
TimBoolDown = false;
TimeSpeedDown = 0;
}
if(up == Speed || down == Speed)
{
openOrders();
}
if(priceUp == 0)
{
priceUp = ask;
}
if(priceDown == 0)
{
priceDown = ask;
}
}
else // Есть открытый ордер по текущему символу
{
OrderSelect(currentSymbolOrderPos, SELECT_BY_POS, MODE_TRADES);
if (OrderType() == OP_BUY&&OrderMagicNumber() == Magic)
{
if(OrderSal == true)
{
OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid - StopLoss*Point*PipMultiplier,Digits),'', 0, Red);
OrderSal = false;
}
if (Bid-OrderOpenPrice()>TrSt*Point*PipMultiplier)
{
if (OrderStopLoss()<Bid-(TrSt)*Point*PipMultiplier)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid - (TrSt)*Point*PipMultiplier,'', 0, Red);
}
}
}
if (OrderType() == OP_SELL&&OrderMagicNumber() == Magic)
{
if(OrderSal == true)
{
OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask + StopLoss*Point*PipMultiplier, Digits),'', 0, Red);
OrderSal = false;
}
if (OrderOpenPrice()-Ask > TrSt*Point*PipMultiplier)
{
if (OrderStopLoss() > Ask +(TrSt)*Point*PipMultiplier)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask + (TrSt)*Point*PipMultiplier,'', 0, Red);
}
}
}
}
return(0);
}
double GetLots()
{
return (GetLotSize());
}
double GetLotSize()
{
int dig = MarketInfo(OrderSymbol(), MODE_DIGITS);//Get digits size
double MinlotTmp = MarketInfo(Symbol(), MODE_MINLOT); //What's the minimum possible lot size
double MaxlotTmp = MarketInfo(Symbol(), MODE_MAXLOT); //What's the maximum possible lot size
double Leverage = AccountLeverage(); //How much can you use depending on your account ballance and what the broker allowes
double LotSize = MarketInfo(Symbol(), MODE_LOTSIZE); //What is the allowed lot size
double lotsTmp = MathMin(MaxlotTmp, MathMax(MinlotTmp, Lots));
if (LotsOptimized && Risk > 0.0 && AccountFreeMargin() > Ask * lotsTmp * LotSize / Leverage) lotsTmp = NormalizeDouble(AccountFreeMargin() * Risk / LotSize, dig);
else lotsTmp = MinlotTmp;
lotsTmp = MathMax(MinlotTmp, MathMin(MaxlotTmp, NormalizeDouble(lotsTmp / MinlotTmp, 0) * MinlotTmp));
//lotsTmp = NormalizeDouble(lotsTmp / Max_BuySell, LotDecimal);
if (lotsTmp > MaxLot) lotsTmp = MaxLot;
//if (AccountFreeMargin() < Ask * lotsTmp * LotSize / Leverage) {
//Print("Low Account Balance. Lots = ", lotsTmp, " , Free Margin = ", AccountFreeMargin());
//Comment("Low Account Balance. Lots = ", lotsTmp, " , Free Margin = ", AccountFreeMargin());
// return;
return (lotsTmp);
}