Советники: Замок - страница 7

 

На мониторинге обновлена версия Zamok v1.4.1

параметр профит-"30Трал"

 
Basic:
jay34:
Всем-всем - Здорово! Не разберусь, а где можно найти новую версию 1.4.1? И ещё, как использовать последний индикатор?

Я же говорю проверяется модератором скоро опубликуют)))))

Всем привет! Идея интересная, погонял его недельку...пока вроде нормуль. Basic, скинь пож. на мыло обработанную версию. Очень уж невтерпёж)))...(прям аж ручки трясутся...), посмотреть на Замок, версии 1.4.1
 

Всем привет! Идея интересная, погонял его недельку...пока вроде нормуль. Basic, скинь пож. на мыло обработанную версию. Очень уж невтерпёж)))...(прям аж ручки трясутся...), посмотреть на Замок, версии 1.4.1

+1 - каков результат недели? сколько пар юзали? Скажите еще - есть ли там усреднение в случае минуса на 2 парах (такое ж может быть теоретически?). Как обстоят дела с параметром Риск у данного сова - сколько лотов на скольких парах можно открывать одновременно?
 
roller:

Всем привет! Идея интересная, погонял его недельку...пока вроде нормуль. Basic, скинь пож. на мыло обработанную версию. Очень уж невтерпёж)))...(прям аж ручки трясутся...), посмотреть на Замок, версии 1.4.1

+1 - каков результат недели? сколько пар юзали? Скажите еще - есть ли там усреднение в случае минуса на 2 парах (такое ж может быть теоретически?). Как обстоят дела с параметром Риск у данного сова - сколько лотов на скольких парах можно открывать одновременно?

Результат на месте, так как в поиске лучших пар...но робот интересный))) усреднения не заметил, все пары живут своей скромной жизнью( если конечно мэджики разные ставить)...выбирать пары получается методом проб и ошибок. У меня на 500 фантиках стояли три пары с лотом 0.1(ставить лот меньше нет смысла), просадка доходила до -130...но всё это относительно, из-за вечного поиска))) пока попробовал 5 пар, 2 уже откинул(хотя наверно рановато откинул, слишком малый срок) параметр Риск тут я понимаю такой-пока бабла хватает)
 

Возможно все это уже исправлено в 1.4.1, но пока ее нет...

После остановки терминала и повторном его запуске советник перестал подавать признаки жизни - в логе появилась запись "Zero divide"

Небольшое расследование показало что возникает это деление в функции: void compins()

поскольку значение c_val_sv в

if(osn_sv>c_val_sv)
{
Lot2=Lot*(osn_sv/c_val_sv);
Lot1=Lot;
}

= 0

случилось это из-за ошибки при вызове функций:

c_val_sv=c_val_sv+( iHigh(C_валютой,timfr_rek,q)- iLow(C_валютой,timfr_rek,q));

GetLastError() возвращает значение:
//ERR_INCORRECT_SERIESARRAY_USING 4054 Неправильное использование массива-таймсерии

из-за того что переменные osnval = "" и timfr_rek = 0

и вероятнее всего ошибка связана с использованием переменной osnval (ранее чем она получила значение Symbol())

вот в этих функциях:

int start()
{
vklutenie();
compins();
osnval=Symbol();

что исправляется легко :)

но также это связано с использованием в compins() переменной timfr_rek равной нулю после рестарта советника с непроведенной оптимизацией, которая и должна была заполнить эту переменную...

И тут я ввязываться боюсь - возможно случайное изменение Логики работы советника... - Ждем Автора :)

 
Shai:

Возможно все это уже исправлено в 1.4.1, но пока ее нет...

После остановки терминала и повторном его запуске советник перестал подавать признаки жизни - в логе появилась запись "Zero divide"

Небольшое расследование показало что возникает это деление в функции: void compins()

поскольку значение c_val_sv в

if(osn_sv>c_val_sv)
{
Lot2=Lot*(osn_sv/c_val_sv);
Lot1=Lot;
}

= 0

случилось это из-за ошибки при вызове функций:

c_val_sv=c_val_sv+( iHigh(C_валютой,timfr_rek,q)- iLow(C_валютой,timfr_rek,q));

GetLastError() возвращает значение:
//ERR_INCORRECT_SERIESARRAY_USING 4054 Неправильное использование массива-таймсерии

из-за того что переменные osnval = "" и timfr_rek = 0

и вероятнее всего ошибка связана с использованием переменной osnval (ранее чем она получила значение Symbol())

вот в этих функциях:

int start()
{
vklutenie();
compins();
osnval=Symbol();

что исправляется легко :)

но также это связано с использованием в compins() переменной timfr_rek равной нулю после рестарта советника с непроведенной оптимизацией, которая и должна была заполнить эту переменную...

И тут я ввязываться боюсь - возможно случайное изменение Логики работы советника... - Ждем Автора :)


Приятно иметь дело с людьми которые говорят по существу)))) Да действительно такая проблема есть.
 

Предлагаю такое решение, функции vklutenie(); нам нужна для проверки есть ли позиции и учёта баланса если есть а compins(); нужна для подбора лота так что мы можем их перенести ниже после присвоения переменной osnval=Symbol( ) и вызова оптимизатора при включении и рестарте поэтому берём и переносим сюда>>>>>>>>

int Бары_оптимизации,c;
string sd,osnval;

//-----------------------------------------------------------------------------------------------------
int start()
{
osnval=Symbol( );
Бары_оптимизации=iBarShift(osnval,0,Оптимизировать,FALSE);
if(Seconds()==30){time=time+1;}
if(time>=Оптимизировать_каждые && C_валютой!="Валюта" && vkl==0){opt=0;time=0;}
//-----------------------------------------------------------------------------------------------------
for(int k=0;k<ObjectsTotal();k++)
{
if(ObjectGet(ObjectName(k),OBJPROP_ARROWCODE)==SYMBOL_THUMBSDOWN) {ploho = true;}
if(ObjectGet(ObjectName(k),OBJPROP_ARROWCODE)==SYMBOL_STOPSIGN) {sstop =true;}
}
if(((ploho == true && sstop ==true)||opt==0)&& C_валютой!="Валюта"){rek_period=0;punn=0;optimizator();ObjectsDeleteAll(EMPTY, OBJ_ARROW);
ploho = FALSE; sstop = FALSE;opt=1;}
//-----------------------------------------------------------------------------------------------------
vklutenie();compins(); <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
sd="\n\n"+osnval+" > "+C_валютой;

if(timfr_rek!=0)

Я думаю проблема будет решена!!! Спасибо Shai ))

 
Basic, если включена функция SL, допустим 30$, то он закроет ордера по сигналу, если сигнал будет раньше, чем SL ? то же самое с профитом?
 
Basic:

Предлагаю такое решение, функции vklutenie(); нам нужна для проверки есть ли позиции и учёта баланса если есть а compins(); нужна для подбора лота так что мы можем их перенести ниже после присвоения переменной osnval=Symbol( ) и вызова оптимизатора при включении и рестарте поэтому берём и переносим сюда>>>>>>>>

...

Я думаю проблема будет решена!!! Спасибо Shai ))


:) Спасибо!

Перенес, инициализация и оптимизация прошли успешно, советник заработал и решил закрыть два ордера оставшиеся с прошлой недели...

после чего ругнулся на: "unknown ticket for OrderClose function"

мне кажется есть неточность в функции:

void CLOSEORDER()
{
 for (int i=0; i<OrdersTotal(); i++)
 { 
  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
  {
   if (Magic==OrderMagicNumber())
   { 
    if (OrderType()==OP_BUY)
    {
     OrderClose(OrderTicket(),OrderLots(),MarketInfo(osnval,MODE_BID),3,CLR_NONE);
     OrderClose(OrderTicket(),OrderLots(),MarketInfo(C_валютой,MODE_BID),3,CLR_NONE); // вторая попытка удалить тот 
                                                                                   //же тикет на 
                                                                                   //другой паре
    } 
    // аналогично и для SELL
   }
  } 
 }
 closs=1
}

конечно это вроде бы не особо критично - все-таки оба ордера будут удалены, но... как-то оно не совсем корректно :)

-пытаться удалить по выбранному единственному тикету сразу два ордера по двум парам дуплетом навскидку не глядя :)

хотя, да - пока не могу придумать ситуацию где это вызовет проблемы :)

PS а что же все-таки с версией 1.4.1? Неужели проверка и модерация тут настолько затяжная? 0_о

 

Shai:


Перенес, инициализация и оптимизация прошли успешно, советник заработал и решил закрыть два ордера оставшиеся с прошлой недели...

после чего ругнулся на: "unknown ticket for OrderClose function"

мне кажется есть неточность в функции:

void CLOSEORDER()
{
 for (int i=0; i<OrdersTotal(); i++)
 { 
  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
  {
   if (Magic==OrderMagicNumber())
   { 
    if (OrderType()==OP_BUY)
    {
     OrderClose(OrderTicket(),OrderLots(),MarketInfo(osnval,MODE_BID),3,CLR_NONE);
     OrderClose(OrderTicket(),OrderLots(),MarketInfo(C_валютой,MODE_BID),3,CLR_NONE); // вторая попытка удалить тот 
                                                                                   //же тикет на 
                                                                                   //другой паре
    } 
    // аналогично и для SELL
   }
  } 
 }
 closs=1
}

конечно это вроде бы не особо критично - все-таки оба ордера будут удалены, но... как-то оно не совсем корректно :)

-пытаться удалить по выбранному единственному тикету сразу два ордера по двум парам дуплетом навскидку не глядя :)

хотя, да - пока не могу придумать ситуацию где это вызовет проблемы :)

PS а что же все-таки с версией 1.4.1? Неужели проверка и модерация тут настолько затяжная? 0_о


Да я просто не стал мудрить ну если напрягает можно прописать так:

//-------------------------------------------------------------------------------------------------------
void CLOSEORDER()
{
   for (int i=0; i<OrdersTotal(); i++)
   {                                               
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
      {
         if (Magic==OrderMagicNumber())
         { 
         if (OrderType()==OP_BUY && OrderSymbol( )==osnval)
            {OrderClose(OrderTicket(),OrderLots(),MarketInfo(osnval,MODE_BID),3,CLR_NONE);}
         if (OrderType()==OP_BUY && OrderSymbol( )==C_валютой)
            { OrderClose(OrderTicket(),OrderLots(),MarketInfo(C_валютой,MODE_BID),3,CLR_NONE);}
            
         if (OrderType()==OP_SELL && OrderSymbol( )==osnval)
            {OrderClose(OrderTicket(),OrderLots(),MarketInfo(osnval,MODE_ASK),3,CLR_NONE);}
         if (OrderType()==OP_SELL && OrderSymbol( )==C_валютой)
            {OrderClose(OrderTicket(),OrderLots(),MarketInfo(C_валютой,MODE_ASK),3,CLR_NONE);}
         }
            
      }   
   }
   closs=1;
}
Причина обращения: