Как проверить сделки в рамках недели???? - страница 2

 
jhon:

Вот пытаюсь сделать что-то подобное...

Только не понимаю почем Print(OrderProfit) - постоянно показывает 0. А к Print("Metka"); даже не доходит. Как думаете что это может быть?


Поменяйте в проверках типы ордеров на OP_SELL и OP_BUY.
 
jhon:
Вообщем что-то у меня не получается. Всё ещё в поиске решения! Кому не трудно пусть напишет.


Тут вот еще в каком направлении можете поразмышлять, если Вас интересует - за ТЕКУЩУЮ неделю, то

до цикла запоминаете время начала недели, т.е.

if (DayOfWeek()==1 && Hour()==1) // условие начала недели
   ВРЕМЯ_НАЧАЛА_НЕДЕЛИ = TimeCurrent();

причем, переменная ВРЕМЯ_НАЧАЛА_НЕДЕЛИ - должна быть объявлена глобальной.

Далее, в том цикле сравниваете последовательно время закрытия, выбранных ордеров с истории - OrderCloseTime(), если оно больше значения переменной ВРЕМЯ_НАЧАЛА_НЕДЕЛИ, то их считаете, проверяя при этом их количество на установленный Вами максимум, в данном случае, как Вы пишете макс. = 2;

Все. При достижении этого значения, и пропИсываете в сОве "перекур" до конца текущей недели, посредством установки и снятия флагов - все.

При достижения выбранного ордера с OrderCloseTime() < ВРЕМЯ_НАЧАЛА_НЕДЕЛИ, выходите из цикла и продолжаете выполнение ф-ии старт эксперта.

 

може я не в тему - но у меня есть такая функция - подсчитывает прибыль (убыток) за заданный день

// +----------------------------------------------------------------------+
//------- : функция подсчета прибыли (убытка) по истории счета 
double GetProfitForDay(int ai_0) 
{  
double l_total = 0;
for (int l_pos = 0; l_pos < OrdersHistoryTotal(); l_pos++) 
    {
    if (!(OrderSelect(l_pos, SELECT_BY_POS, MODE_HISTORY))) break;
    if (UseSymbolStatistik)
       {
       if (OrderSymbol() == Symbol())
          {
          if (OrderCloseTime() >= iTime(Symbol(), PERIOD_D1, ai_0) && OrderCloseTime() < iTime(Symbol(), PERIOD_D1, ai_0) + 86400) 
             {
             l_total = l_total + OrderProfit() + OrderCommission() + OrderSwap();
             }
          }
       }
    else
      {
      if (OrderCloseTime() >= iTime(Symbol(), PERIOD_D1, ai_0) && OrderCloseTime() < iTime(Symbol(), PERIOD_D1, ai_0) + 86400) 
         {
         l_total = l_total + OrderProfit() + OrderCommission() + OrderSwap();
         }
       }   
    }
return (l_total);

}
// +----------------------------------------------------------------------+

переменная bool UseSymbolStatistik отвечает за пересчёт, если true - по символу график, если fals - то все ордера в истории...

Вызов функции :

double HistoryProfit = GetProfitForDay(0);

где передаваемый аргумент номер дня - то есть если = 0 - сегодня, = 1 - вчера, = 2 позавчера ... и так далее

функция возвращяет общюю прибыль (убыток) в валюте депозита заданного дня ....

 
Roman.:


Тут вот еще в каком направлении можете поразмышлять, если Вас интересует - за ТЕКУЩУЮ неделю, то

до цикла запоминаете время начала недели, т.е.

причем, переменная ВРЕМЯ_НАЧАЛА_НЕДЕЛИ - должна быть объявлена глобальной.

Далее, в том цикле сравниваете последовательно время закрытия, выбранных ордеров с истории - OrderCloseTime(), если оно больше значения переменной ВРЕМЯ_НАЧАЛА_НЕДЕЛИ, то их считаете, проверяя при этом их количество на установленный Вами максимум, в данном случае, как Вы пишете макс. = 2;

Все. При достижении этого значения, и пропИсываете в сОве "перекур" до конца текущей недели, посредством установки и снятия флагов - все.

При достижения выбранного ордера с OrderCloseTime() < ВРЕМЯ_НАЧАЛА_НЕДЕЛИ, выходите из цикла и продолжаете выполнение ф-ии старт эксперта.

такая система "сломается" при сбое интернета
 
Mislaid:

Поменяйте в проверках типы ордеров на OP_SELL и OP_BUY.

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

 
nadya:
такая система "сломается" при сбое интернета

Аргументируйте пожалуйста! А то что-то не очень понятно почему. Разве TimeCurrent - работает от сервера?
 
jhon:

Аргументируйте пожалуйста! А то что-то не очень понятно почему. Разве TimeCurrent - работает от сервера?

Нет. То что переменная в условии возвращает первый час понедельника, т.е. если не будет связи в течение этого первого часа понедельника, то уже начало следующей (этой) недели сОв не отследит... :-)

if (DayOfWeek()==1 && Hour()==1) // условие начала недели
   ВРЕМЯ_НАЧАЛА_НЕДЕЛИ = TimeCurrent();
Hour()==1
 
nadya:
такая система "сломается" при сбое интернета

Под реальное бабло - в коде Сова размещается ф-ия отслеживания наличия связи по одной из выделенных линий и-нета - при дисконнекте по главной, он автоматом перецепляется на одну из вспомогательных... :-) - ЭТО НАЗЫВАЕТСЯ ЗАТОЧКА БОЕВОГО СОВА ПОД РЕАЛ!!! :-)

А так - 500 р и VPS у Вас на 1 месяц пользования с ПОСТОЯННЫМ и-нетом без сбоев, главное с VPS конторой не ошибиться... :-)

 
jhon:

Здравствуйте дорогие форумчане!

Помогите решить одну задачу...

Как узнать сколько убыточных сделок было совершено в текущую неделю?

С уважением...

Полистайте функции Кима, там найдете для себя много полезного.
 
mersi:
Полистайте функции Кима, там найдете для себя много полезного.

Полезного - много!!! Именно убыточных по кол-ву за неделю - я там не нашел...
Причина обращения: