Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1552

 
законопослушный гражданин:

сов должен по своему алгоритму открывать сделки

если стоп, то следующая сделка с мартином, и так до указанного мной количества умножений (функция - OrdersClose  = .....;).

далее если сов. выключился вместе с терминалом, просто кнопкой "авто-торгвля", другим совом, то следующий запуск работы начинается со стартового лота, а не с последнего увеличенного мартингейлом.

еще неплохо было бы к нему расписание "прикрутить", но эта мысль только сейчас в голову пришла.

к примеру: включился в понедельник в 10-00 со стартового лота, в течение дня выключился при достижении определенного результата, утром во вторник снова включился в 10-00 и снова начал со стартового лота.

всё.

с этим вопросом как до конца разобраться?

 
законопослушный гражданин:

с этим вопросом как до конца разобраться?

тебе отвечаешь, отвечаешь,

но ты пропадаешь и потом снова те же вопросы

 
MakarFX:

тебе отвечаешь, отвечаешь,

но ты пропадаешь и потом снова те же вопросы

вы мне показали что нужно создать глобальную переменную, я попробовал но затем у меня возник вопрос

я плохо в этом пока разбираюсь. у меня уже есть datetime OpenTime; -его нужно заменить на datetime Start  или в дополнение?

"а дальше если нет отрытых/закрытых ордеров позже "Start"Lots=Lot; " - это совсем не понятно куда к чему отнести?

затем вы просили описать кратко логику сова, что я от него хочу. я описал 

на вопрос как сделать автоматический сброс лота при выключении так ответа и не получил.

 
законопослушный гражданин:

вы мне показали что нужно создать глобальную переменную, я попробовал но затем у меня возник вопрос

я плохо в этом пока разбираюсь. у меня уже есть datetime OpenTime; -его нужно заменить на datetime Start  или в дополнение?

"а дальше если нет отрытых/закрытых ордеров позже "Start"Lots=Lot; " - это совсем не понятно куда к чему отнести?

затем вы просили описать кратко логику сова, что я от него хочу. я описал 

на вопрос как сделать автоматический сброс лота при выключении так ответа и не получил.

Когда я просил описать логику советника, то имел ввиду не возникшую проблему, а общие действия

например:

если есть сигнал, то открываем ордер

если ордер закрылся с прибылью, то ждем новый сигнал

если ордер закрылся с убытком, то увеличиваем лот и ждем новый сигнал


мне не нужна твоя стратегия, мне надо понять, что советник должен делать

 
законопослушный гражданин:

вы мне показали что нужно создать глобальную переменную, я попробовал но затем у меня возник вопрос

я плохо в этом пока разбираюсь. у меня уже есть datetime OpenTime; -его нужно заменить на datetime Start  или в дополнение?

"а дальше если нет отрытых/закрытых ордеров позже "Start"Lots=Lot; " - это совсем не понятно куда к чему отнести?

затем вы просили описать кратко логику сова, что я от него хочу. я описал 

на вопрос как сделать автоматический сброс лота при выключении так ответа и не получил.

Для начала вот функция:

//+----------------------------------------------------------------------------+
//|  Размер лота/профита и время последней закрытой позиции                    |
//|  1 - возвращает размер лота                                                |
//|  2 - возвращает размер профита с учетом комиссии и свопа                   |
//|  3 - возвращает время закрытия ордера                                      |
//+----------------------------------------------------------------------------+
double GetInfoLastPos(int a=1)
  {
   datetime t=0;
   double result=0,l=0,p=0;
   int i=OrdersHistoryTotal();

   for(int pos=0; pos<i; pos++)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY))
        {
         if((OrderSymbol()==_Symbol)&&(OrderMagicNumber()==Magic))
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(t<OrderCloseTime()) {t=OrderCloseTime(); l=OrderLots(); p=OrderProfit()+OrderCommission()+OrderSwap();}
              }
           }
        }
     }
   if(a==1) {result=l;} else
   if(a==2) {result=p;} else
   if(a==3) {result=(double)t;}
   else     {result=0;}
   return(result);
  }

если ордер с убытком

   if(GetInfoLastPos(2)<0)
     {Lots=NormalizeDouble(GetInfoLastPos(1)*K_Martin,DigitsLot);}
   else 
     {Lots=NormalizeDouble(Lot,DigitsLot);}
 

По поводу

datetime Start;

int OnInit()
{
   Start=TimeCurrent();
.....................
}
void OnTick()
{
   if (!IsTradeAllowed()) 
   {
      DrawLABEL("Торговля",0,0,0,Red,"Торговля запрещена");
      Start=TimeCurrent();
      return;
   } 
.....................
}

если время последнего закрытого ордера меньше Start(время запуска советника)

   if(GetInfoLastPos(3)<Start)
     {Lots=NormalizeDouble(Lot,DigitsLot);}
 
MakarFX:

Когда я просил описать логику советника, то имел ввиду не возникшую проблему, а общие действия

например:

если есть сигнал, то открываем ордер

если ордер закрылся с прибылью, то ждем новый сигнал

если ордер закрылся с убытком, то увеличиваем лот и ждем новый сигнал


мне не нужна твоя стратегия, мне надо понять, что советник должен делать

если есть сигнал, то открываем ордер стартовым лотом

если ордер закрылся с прибылью, то ждем новый сигнал

если ордер закрылся с убытком, то увеличиваем лот и ждем новый сигнал

если прибыль достигла хххх(в валюте депозита) советник закрывает все сделки и сбрасывает лот к стартовому

если убыток достиг уууу (в валюте депозита) советник закрывает все сделки и сбрасывает лот к стартовому

если советник был выключен затем снова включен то: - если есть сигнал, то открываем ордер стартовым лотом

так?

 
законопослушный гражданин:

если есть сигнал, то открываем ордер стартовым лотом

если ордер закрылся с прибылью, то ждем новый сигнал

если ордер закрылся с убытком, то увеличиваем лот и ждем новый сигнал

если прибыль достигла хххх(в валюте депозита) советник закрывает все сделки и сбрасывает лот к стартовому

если убыток достиг уууу (в валюте депозита) советник закрывает все сделки и сбрасывает лот к стартовому

если советник был выключен затем снова включен то: - если есть сигнал, то открываем ордер стартовым лотом

так?

Да, так.

А если советник был выключен затем снова включен и есть открытый ордер?

 
MakarFX:

Да, так.

А если советник был выключен затем снова включен и есть открытый ордер?

если сов выключается, то перед выключением он закрывает все открытые им ордера, неважно в прибыли или в убытке,

соответственно когда включаем заново- "чистое поле", стартовый лот.

индикатор который дает сигналы на открытие, в примере был RSI но я предполагаю оттестировать три разных сова на разных индикаторах.

все три мной доработаны в плане добавления мартина. так что если у меня будет пример кода по оговоренной нами выше - логике, надеюсь я сам смогу  переработать коды от других советников, благо они бесплатно выложены с открытым кодом.

 
законопослушный гражданин:

если сов выключается, то перед выключением он закрывает все открытые им ордера, неважно в прибыли или в убытке,

соответственно когда включаем заново- "чистое поле", стартовый лот.

индикатор который дает сигналы на открытие, в примере был RSI но я предполагаю оттестировать три разных сова на разных индикаторах.

все три мной доработаны в плане добавления мартина. так что если у меня будет пример кода по оговоренной нами выше - логике, надеюсь я сам смогу  переработать коды от других советников, благо они бесплатно выложены с открытым кодом.

а сов.выключается при смене таймфрейма, проблемами связи и ещё по 100500 и одной причине..

перезагрузка советника это его естественная суть