Как передать полученные значения советнику на все валютные пары

 

Торговля портфелем.
В советнике после закрытия позиции по символу идёт расчёт и надо чтобы с этими полученными значениями далее работали все другие вал.пары по своим сигналам.

Например есть 3 полученных значения после закрытия:

Profit = 1 (закрытие было прибыльным)
Loss = 0 (закрытие не было убыточным)
Sum = 0.2 (следующий объём лота)

Расчёт идёт не в цикле закрытых ордеров по профиту.
При открытии и закрытии записывается Bid, потом сравнивается.
если был бай ордер и Bid закрытия > Bid открытия то считаем Profit++
если был бай ордер и Bid закрытия < Bid открытия то считаем Loss++
Не спрашивайте зачем такой расчёт

У всех вал.пар должны быть эти значения, далее они должны обновляться после очередного закрытия

Profit = 1 (закрытие не было прибыльным)
Loss = 1 (закрытие было убыточным)
Sum = 0.1 (следующий объём лота)

и т.д.

 
ну тык если сов мультивалютник - то внутри советника, если нужно чтоб между собой копии одного советника общались то глоб переменные или запись в файл, кому как удобнее, я например делал учёт полученных убытков в глобальную переменную - все копии одного советника видят эту переменную и если есть убытки то запускается алгоритм отработки убытков в простонародье мартингейл на всех копиях, полученный профит скидывается в туже переменную
 
Aleksey Semenov:
внутри советника, если нужно чтоб между собой копии одного советника общались то глоб переменные или запись в файл, кому как удобнее, я например делал учёт полученных убытков в глобальную переменную - все копии одного советника видят эту переменную и если есть убытки то запускается алгоритм отработки убытков в простонародье мартингейл на всех копиях, полученный профит скидывается в туже переменную

Глобальные переменные за стартом, но всё-равно другие пары не видят новые данные

//глобальная переменная 
double Sum;
int  Profit=0,Loss=0;

void start()
  { 
   ... 
  }


 
Natalya Dzerzhinskaya:

Глобальные переменные за стартом, но всё-равно другие пары не видят новые данные


Глобальные переменные терминала

запись в глобальные пер.

datetime  GlobalVariableSet( 
   string  name,      // имя 
   double  value      // устанавлимое значение 
   );

чтение глоб. пер.

double  GlobalVariableGet( 
   string  name      // имя 
   );
 
Alekseu Fedotov:

Глобальные переменные терминала

запись в глобальные пер.

чтение глоб. пер.

Какой-то ответ невразумительный.

 
Natalya Dzerzhinskaya:

Какой-то ответ невразумительный.

А так Глобальные переменные?

 
Konstantin Nikitin:

А так Глобальные переменные?

И так тоже.
Организовать то как используя эти переменные?

 
Natalya Dzerzhinskaya:

И так тоже.
Организовать то как используя эти переменные?

string symbol[];
double priceSymbol[];
//+------------------------------------------------------------------+
int OnInit()
{
     return(INIT_SUCCEEDED);
}
  
void OnTick()
{
     VariableSet( SymbolInfoDouble(Symbol(), SYMBOL_BID) );
     VariableGet();
}

void VariableSet(const double value)
{
     string name = "prefix_"+Symbol();
     GlobalVariableSet(name, value); 
}

void  VariableGet()
{
     ArrayFree(symbol);
     ArrayFree(priceSymbol);
     int y = 0;
     for(int i=0; i<GlobalVariablesTotal(); i++)
     {
          string str=GlobalVariableName(i), _str[];
          StringSplit(str, StringGetCharacter("_", 0), _str);
          if(_str[0] != "prefix") continue;
          
          ArrayResize(symbol, y+1);
          symbol[y] = _str[1];
          ArrayResize(priceSymbol, y+1);
          priceSymbol[y] = GlobalVariableGet(str);
          y++;
     }
}

void OnDeinit(const int reason)
{
     GlobalVariablesDeleteAll("prefix");
}

Как-то так.

 
Natalya Dzerzhinskaya:

И так тоже.
Организовать то как используя эти переменные?

дело в том что механизм работы с глоб переменными (те которые GlobalVariable) нужно родить самому и рзобраться что как и где, иначе толку от того что вам пример кода скинут, Глоб переменные живут не в советнике а терминале - из советника можно создать глоб переменную, проверить не создана ли уже глоб переменная с таким именем и делее чтение/перезапись и удаление, вам же проще будет разобраться - пишете в коде там у себя создать глоб переменную если переменная ещё не создана, записать в неё какоето значение(при выполнении условия), получить это значение из глоб переменной, вывести на экран чтоб убедиться что значение получено верно - всё, все копии будут при выполнении какогото условия скидывать в глоб переменную "своё" значение и все копии будут это значение видеть

 
Вы можете дать нормальный-адекватный пример, а не кусками бросаться ?
 
Natalya Dzerzhinskaya:
Вы можете дать нормальный-адекватный пример, а не кусками бросаться ?
string Name = ИмяГлобПеременной;
bool check = GlobalVariableCheck(Name); \\ проверка на то есть ли уже переменная с таким именем
  if(check == false)
  {
  GlobalVariableSet(Name,0);  \\создали глоб переменную, можно сразу вместе со значением создавать вместо  0
  }
  
if(условие выполнилось)
  {
   GlobalVariableSet(Name,записываемое значение);
  }

  Получение записанного = GlobalVariableGet(Name);

  если надо удалить - удалили переменную GlobalVariableDel(Name);

  если переменных много или имя глоб переменной неизвестно используется цикл переборки GlobalVariablesTotal(); с возвратом имён переменных GlobalVariableName(i)
   
с вас 10$ за обучение )))
Причина обращения: