Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 464

 

Не могу решить задачу уже притупляю походу и пивко не помогает

Дано:

1- на графике или символе работает 30 советников и у всех разный меджик номер

2- у каждого советника открыто по 3-5 ордеров ...

Задача вывести на график в столбик все меджик номера и суммарную прибыль/убыток по ним ...

Копаю тут но не раскапывается :

  #define  MagicN 0
#define  MagProf 1
 ArrayResize(mags,100,1000);ArrayInitialize(mags,0);  
   for(int f=OrdersTotal()-1; f>=0; f--)
      if(OrderSelect(f,SELECT_BY_POS))
              {
               for(int z=100-1; z>=0; z--)
                 {
                  if(mags[z][MagicN]==OrderMagicNumber())
                  mags[z][MagProf]+=OrderProfit()+OrderCommission()+OrderSwap();

                  if(mags[z][MagicN]!=OrderMagicNumber())
                    {
                     mags[z][MagicN]=OrderMagicNumber();
                     mags[z][MagProf]+=OrderProfit()+OrderCommission()+OrderSwap();
                    }
                 }
              }

Добры люди поможите кто чем может !!! )))))))

 
VOLDEMAR:

Не могу решить задачу уже притупляю походу и пивко не помогает

Дано:

1- на графике или символе работает 30 советников и у всех разный меджик номер

2- у каждого советника открыто по 3-5 ордеров ...

Задача вывести на график в столбик все меджик номера и суммарную прибыль/убыток по ним ...

Копаю тут но не раскапывается :

Добры люди поможите кто чем может !!! )))))))


Создаем двумерный массив. В первом измерении храним прибыль накопленную, в втором мейджик.

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

По окончании обработки выводим результат на экран

 
Vinin:


Создаем двумерный массив. В первом измерении храним прибыль накопленную, в втором мейджик.

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

По окончании обработки выводим результат на экран


У меня разве не так написано ?
 
VOLDEMAR:

У меня разве не так написано ?

Не совсем. Где Вы определяете размер массива и ведете поиск индекса по Магику. Я этого не увидел
 
for(int f=OrdersTotal()-1; f>=0; f--) // перебор ордеров
if(OrderSelect(f,SELECT_BY_POS))
{
for(int z=0; z<ArraySize(mags); z++)// второй цикл по колличеству элементов в массиве
{
if(mags[z][MagicN]==OrderMagicNumber()) // если меджик уже есть плюсуем профит
{
mags[z][MagProf]+=OrderProfit()+OrderCommission()+OrderSwap();
}
else /если меджика нет
{
ArrayResize(mags,z,1000); // увеличим массив
mags[z][MagicN]=OrderMagicNumber(); // запомним меджик
}
}

}

Вот тока при такой конструкции терминал не тестирует, пишит критическая ошибка

 
VOLDEMAR:
for(int f=OrdersTotal()-1; f>=0; f--) // перебор ордеров
if(OrderSelect(f,SELECT_BY_POS))
{
for(int z=0; z<ArraySize(mags); z++)// второй цикл по колличеству элементов в массиве
{
if(mags[z][MagicN]==OrderMagicNumber()) // если меджик уже есть плюсуем профит
{
mags[z][MagProf]+=OrderProfit()+OrderCommission()+OrderSwap();
}
else /если меджика нет
{
ArrayResize(mags,z,1000); // увеличим массив
mags[z][MagicN]=OrderMagicNumber(); // запомним меджик
}
}

}

Вот тока при такой конструкции терминал не тестирует, пишит критическая ошибка


Чему равна переменная MagicN и где она меняется?
 
в дефине имеет параметр 0 а MagProf в дефине имеет значение 1
 
VOLDEMAR:
в дефине имеет параметр 0 а MagProf в дефине имеет значение 1


Попробуй такой вариант

#define MagicN 0
#define MagProf 1
double mags[10][2];
int CountMagic=0;

void CalcMagic()
  {
   for(int f=OrdersTotal()-1; f>=0; f--) // перебор ордеров
      if(OrderSelect(f,SELECT_BY_POS))
        {
         mags[FindMaic(OrderMagicNumber())][MagProf]+=OrderProfit()+OrderCommission()+OrderSwap();
        }

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

int FindMaic(int Magic)
  {
   int Res=-1;
   for(int i=0;i<CountMagic;i++)
     {
      if(mags[i][MagicN]==Magic)
         Res=i;
      break;
     }
   if(Res==-1)
     {
      Res=CountMagic;
      CountMagic++;
      if(CountMagic>=ArrayRange(mags,0))
        {
         ArrayResize(mags,CountMagic+10);
        }

     }

   return(Res);
  }
//+------------------------------------------------------------------+

В многомерных массивах размерность можно определять с помощью ArrayRange()

 
Есть стоплевел и фризлевел которые я могу получить через маркетинфо, а есть такое же ограничение, но которое касается минимальной даты экспирации, как правило оно равно 15 минутам. то есть если я ставлю отложенный ордер то минимальное время через которое он самоудалится, если не сработал, есть 15 минут. Вот в этом и вопрос - как программно узнать это ограничение ?
 
Desead:
Есть стоплевел и фризлевел которые я могу получить через маркетинфо, а есть такое же ограничение, но которое касается минимальной даты экспирации, как правило оно равно 15 минутам. то есть если я ставлю отложенный ордер то минимальное время через которое он самоудалится, если не сработал, есть 15 минут. Вот в этом и вопрос - как программно узнать это ограничение ?

У брокера спросите! Некоторые не исполняют экспирацию.

Я проставляю не в ордере, а по условиям удаляю.