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

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

спасибо

а вот в этой функции: double GetProfitFromStart()

желтым это просто наименование функции, я правильно понимаю?

и в принципе может быть каким угодно?

Да, я ее так назвал чтобы было понятно Get(получить) Profit(профит) FromStart(с начала отсчета)
 
MakarFX:
Да, я ее так назвал чтобы было понятно Get(получить) Profit(профит) FromStart(с начала отсчета)

спасибо.

в Expert tick function   

void OnTick() - получается, что строчка кода : if(CountOrders()==0&&ObjectGetInteger(0,"lab_Button",OBJPROP_STATE))  это не только запуск первого ордера, при первичном запуске советника,

но и каждый запуск после закрытия ордера по условию: 

if(GetProfitFromStart()>CountProfit || GetProfitFromStart()<CountLoss*-1)
     {
      if (IsTesting())
        {
         CloseOrder(); ObjectSetInteger(0,"lab_Button",OBJPROP_STATE,false);
        }
      else
        {
         CloseOrder();
}
}

я правильно понимаю?

 
MakarFX:

размер убытка по всем убыточным ордерам

Наверно я опять не правильно понял

или размер убытка по каждому убыточному

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


Если надо только однократно распечатать, то лучше сделать в виде скрипта

не обязательно, можно так

Ваш код помог, теперь одни и те же сообщения не по 100 раз выдаются, а только по 4-10 раз. Возможно нужно добавить оператор else.
 
Petronet:
Ваш код помог, теперь одни и те же сообщения не по 100 раз выдаются, а только по 4-10 раз. Возможно нужно добавить оператор else.
Как и где код прописан?
 
законопослушный гражданин:

спасибо.

в Expert tick function   

void OnTick() - получается, что строчка кода : if(CountOrders()==0&&ObjectGetInteger(0,"lab_Button",OBJPROP_STATE))  это не только запуск первого ордера, при первичном запуске советника,

но и каждый запуск после закрытия ордера по условию: 

я правильно понимаю?

Это условия запуска советника, if( если) (CountOrders()==0( ордеров нет )&&ObjectGetInteger(0,"lab_Button",OBJPROP_STATE))( и кнопка нажата), тогда можно торговать

 
MakarFX:
Как и где код прописан?
Код вставлен в тело функции int start() советника. Добавил оператор else который накручивает пустую переменную, дублирование данных прекратилось, но когда идут подряд ДВА минусовых профита, дублирование данных имеет место по 10 и по 2-3 раза. Закомментирован мой первоначальный цикл который выдавал одну и ту же инфу по 100 раз. Рабочий ваш.
int start()
  {
  
  //for (int trade = OrdersHistoryTotal() - 1; trade >= 0; trade--) 
  //{
     //if ( OrderSelect(trade, SELECT_BY_POS,MODE_HISTORY)) 
     //{
         //old_order_type = OrderType();
         //if ( OrderProfit()<0 ) //последний закрытый советником ордер был убыточным, значит, следующий ордер открываем в направлении, противоположном закрытому с убытком
         //{
                //Print("Закрылись с минусом:", OrderProfit());
                //break; //прекращаем поиск
         //}
         
     //}
     //break;
  //}
  
  for(int pos=0; pos<OrdersHistoryTotal(); pos++)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY))
        {
         if(OrderSymbol()==_Symbol)
           {
            if(OrderCloseTime()>=TimeStart)
              {
               if(OrderProfit()<0) {cnt=OrderProfit();
               Print("ордера с минусом", cnt); TimeStart=TimeCurrent(); cnt=0;}
               else gg=gg+1;
              }
           }
        }
     }
 
Petronet:
Код вставлен в тело функции int start() советника. Добавил оператор else который накручивает пустую переменную, дублирование данных прекратилось, но когда идут подряд ДВА минусовых профита, дублирование данных имеет место по 10 и по 2-3 раза. Закомментирован мой первоначальный цикл который выдавал одну и ту же инфу по 100 раз. Рабочий ваш.
// это в глобальные переменные
datetime TimeStart; 

// это в init()

TimeStart=Time[0];

Будет печатать один раз при появлении убыточной сделки

 
Привет всем, вставил функцию для закрытия позиций  в пятницу в 20:30

Но советник не видит что это пятница и закрывает позиции каждый день

стоит так

input bool     UseTimeLimitClose           = true;     // -- Funktion ein/ausschalten --
enum daysOfWeek 
   { 
     Monday = 1, 
     Tuesday = 2, 
     Wednesday = 3, 
     Thursday = 4, 
     Friday = 5
   };
input  daysOfWeek closday          =    5;            // -- Handel bis Tag --
input int    Close_Hour            =   20;            // -- Handel bis Uhrzeit Std.--
input int    Close_min             =   30;



void OnTick() 

 if(UseTimeLimitClose)
     {
      MqlDateTime TimeNow;
      TimeToStruct(TimeCurrent(),TimeNow);
      if  ( TimeNow.day_of_week >= closday  && TimeNow.hour >= Close_Hour && TimeNow.min >= Close_min  ) 
       {
          CloseAllPositions();
       }     

 
Eugen8519:
Привет всем, вставил функцию для закрытия позиций  в пятницу в 20:30

Но советник не видит что это пятница и закрывает позиции каждый день

стоит так

void OnTick() 

 if(UseTimeLimitClose)
     {
      if  (TimeDayOfWeek(TimeCurrent())==closday  && TimeHour(TimeCurrent())>=Close_Hour && TimeMinute(TimeCurrent()) >= Close_min  ) 
       {
          CloseAllPositions();
       }     
 

Подскажите, пожалуйста, как это вывести во внешнюю переменную

double levelss[7] = {0,0.236,0.382,0.5,0.618,1,1.618}; // Уровни Fibo
Причина обращения: