внутри советника, если нужно чтоб между собой копии одного советника общались то глоб переменные или запись в файл, кому как удобнее, я например делал учёт полученных убытков в глобальную переменную - все копии одного советника видят эту переменную и если есть убытки то запускается алгоритм отработки убытков в простонародье мартингейл на всех копиях, полученный профит скидывается в туже переменную
Глобальные переменные за стартом, но всё-равно другие пары не видят новые данные
//глобальная переменная double Sum; int Profit=0,Loss=0; void start() { ... }
Глобальные переменные за стартом, но всё-равно другие пары не видят новые данные
Глобальные переменные терминала
запись в глобальные пер.
datetime GlobalVariableSet( string name, // имя double value // устанавлимое значение );
чтение глоб. пер.
double GlobalVariableGet( string name // имя );
Какой-то ответ невразумительный.
Какой-то ответ невразумительный.
А так Глобальные переменные?
И так тоже.
Организовать то как используя эти переменные?
И так тоже.
Организовать то как используя эти переменные?
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"); }
Как-то так.
И так тоже.
Организовать то как используя эти переменные?
дело в том что механизм работы с глоб переменными (те которые GlobalVariable) нужно родить самому и рзобраться что как и где, иначе толку от того что вам пример кода скинут, Глоб переменные живут не в советнике а терминале - из советника можно создать глоб переменную, проверить не создана ли уже глоб переменная с таким именем и делее чтение/перезапись и удаление, вам же проще будет разобраться - пишете в коде там у себя создать глоб переменную если переменная ещё не создана, записать в неё какоето значение(при выполнении условия), получить это значение из глоб переменной, вывести на экран чтоб убедиться что значение получено верно - всё, все копии будут при выполнении какогото условия скидывать в глоб переменную "своё" значение и все копии будут это значение видеть
Вы можете дать нормальный-адекватный пример, а не кусками бросаться ?
string Name = ИмяГлобПеременной; bool check = GlobalVariableCheck(Name); \\ проверка на то есть ли уже переменная с таким именем if(check == false) { GlobalVariableSet(Name,0); \\создали глоб переменную, можно сразу вместе со значением создавать вместо 0 } if(условие выполнилось) { GlobalVariableSet(Name,записываемое значение); } Получение записанного = GlobalVariableGet(Name); если надо удалить - удалили переменную GlobalVariableDel(Name); если переменных много или имя глоб переменной неизвестно используется цикл переборки GlobalVariablesTotal(); с возвратом имён переменных GlobalVariableName(i)с вас 10$ за обучение )))
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Торговля портфелем.
В советнике после закрытия позиции по символу идёт расчёт и надо чтобы с этими полученными значениями далее работали все другие вал.пары по своим сигналам.
Например есть 3 полученных значения после закрытия:
Profit = 1 (закрытие было прибыльным)
Loss = 0 (закрытие не было убыточным)
Sum = 0.2 (следующий объём лота)
Расчёт идёт не в цикле закрытых ордеров по профиту.
При открытии и закрытии записывается Bid, потом сравнивается.
если был бай ордер и Bid закрытия > Bid открытия то считаем Profit++
если был бай ордер и Bid закрытия < Bid открытия то считаем Loss++
Не спрашивайте зачем такой расчёт
У всех вал.пар должны быть эти значения, далее они должны обновляться после очередного закрытия
Profit = 1 (закрытие не было прибыльным)
Loss = 1 (закрытие было убыточным)
Sum = 0.1 (следующий объём лота)
и т.д.