Коллеги - подскажите как преобразовать массив типа double в string. Надо для записи его в файл. Вот общий тренировочный код.
voidOnStart()
{
double ar[]; // МассивArrayResize(ar,2); // Подготовка массиваint i, Size=ArraySize(ar); // стартовое количество элементов
ar[0]=1; // Установка значений 2-х элементов массива
ar[1]=2;
ArrayResize(ar,3); // Увеличение размера массива
ar[2]=3; // Установка значения новому элементу массиваArrayResize(ar,4); // Увеличение размера массива
ar[3]=4; // Установка значения новому элементу массиваArrayResize(ar,5); // Увеличение размера массива
ar[4]=5; // Установка значения новому элементу массиваArrayResize(ar,6); // Увеличение размера массива
ar[5]=6; // Установка значения новому элементу массивArrayResize(ar,7); // Увеличение размера массива
ar[6]=7; // Установка значения новому элементу массив
Size=ArraySize(ar);// новое количество элементовArraySetAsSeries(ar,true); // Смена направления индексации//--- запись в файл
SaveArrayToFile ("s_ar", ar);
return;
}
bool SaveArrayToFile(string FileName, string &Array[])
{
//--- Открытие файлаint h=FileOpen(FileName,FILE_WRITE|FILE_ANSI|FILE_TXT);
if(h==-1){Alert(" ошибка открытия файла в ф-ии "); return(false);} // Ошибка открытия файла//--- Запись в файлFileWriteInteger(h,ArraySize(Array),INT_VALUE); // Запись размера массиваFileWriteArray(h,Array); // Запись массива//--- Закрытие файлаFileClose(h);
return(true); // Сохранение выполнено
При сохранении и загрузке массива из файла следует учитывать разницу значений размера массива по первому измерению и общее количество элементов массива. При сохранении массива сначала запишем в файл размер массива (общее количество элементов определяемое функцией ArraySize()), затем весь массив:
bool SaveArrayToFile(string FileName,string &Array[])
{
//--- Открытие файлаint h=FileOpen(FileName,FILE_TXT|FILE_WRITE);
if(h==-1) return(false); // Ошибка открытия файла//--- Запись в файлFileWriteInteger(h,ArraySize(Array),INT_VALUE); // Запись размера массиваFileWriteArray(h,Array); // Запись массива//--- Закрытие файлаFileClose(h);
return(true); // Сохранение выполнено
}
Есть два советника по одному инструменту, с разными магиками соответственно. Магик выставляю через CTrade, открываю позицию соответственно тоже через CTrade. При открытой позиции первого советника его магик присваевается второму советнику (установил проверку после открытии позиции, с.м. ниже), поэтому проверка на наличие открытых позиций не видит своего магика, в дальнейшем открывая множество позиций в одну сторону. Счет стоит на демке, в тестере такое выявить невозможно. Если значение магика сохраняется в классе, может его обнулять нужно, но я не знаю как.
intOnInit()
{
// выставляем магик
m_trade.SetExpertMagicNumber(Magic);
return(INIT_SUCCEEDED);
}
открываю позицию соответственно тоже через CTrade:
if(SellCount()>0 || BuyCount()>0)
{
Print("Уже есть позиция на продажу !!!");
return; // не добавлять к открытой позиции на покупку
}
SL=NormalizeDouble(latest_price.bid + STP*_Point,_Digits);
TP=NormalizeDouble(latest_price.bid - TKP*_Point,_Digits);
m_trade.Sell(lots1,_Symbol,0,SL,TP,"LaquerreOSC_MA_2.5.6.7 + 2");
m_position.Select(_Symbol);
{
ulong myMagic=m_position.Magic();
Print(" Открыта поза Селл с магиком № ",myMagic,", И спредом ",SymbolInfoInteger(_Symbol,SYMBOL_SPREAD));
}
//+------------------------------------------------------------------+int SellCount()//проверка рыночных ордеров на продажу
{
int count=0;
for(int i=PositionsTotal()-1; i>=0;i--)
{
if(PositionSelect(_Symbol)==true)
{
if(PositionGetInteger(POSITION_MAGIC)==Magic && PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
count++;
}
}
return(count);
}
//+------------------------------------------------------------------+
Есть два советника по одному инструменту, с разными магиками соответственно. Магик выставляю через CTrade, открываю позицию соответственно тоже через CTrade. При открытой позиции первого советника его магик присваевается второму советнику (установил проверку после открытии позиции, с.м. ниже), поэтому проверка на наличие открытых позиций не видит своего магика, в дальнейшем открывая множество позиций в одну сторону. Счет стоит на демке, в тестере такое выявить невозможно. Если значение магика сохраняется в классе, может его обнулять нужно, но я не знаю как.
Пожалуйста, Вставляйте код правильно, а не в виде простыни текста.
По коду: задавайте во входных параметрах каждому советнику СВОЙ магик. Допустим первому задаёте 10001, тогда второму 10002.
Пожалуйста, Вставляйте код правильно, а не в виде простыни текста.
По коду: задавайте во входных параметрах каждому советнику СВОЙ магик. Допустим первому задаёте 10001, тогда второму 10002.
Спасибо за быстрый ответ. Но в том то и дело, что магики разные. Таким образом я и определил, что оказывается у второго робота позиции открываются с магиком первого. Как так получается и где он сохраняет магик номер первого советника я не знаю, но хотел бы разобраться.
Спасибо за быстрый ответ. Но в том то и дело, что магики разные. Таким образом я и определил, что оказывается у второго робота позиции открываются с магиком первого. Как так получается и где он сохраняет магик номер первого советника я не знаю, но хотел бы разобраться.
В данном случае не "лучше", а именно так и нужно - это класс-обёртка для стандартных торговых функций. Он не хранит множественные магики. Поэтому магик ему нужно устанавливать каждый раз перед тем, как, и когда требуется открывать позиции с новым магиком.
В общем последовательность такова:
нужно открывать позиции с магиком 1 - устанавливаем магик 1, последующие позиции будут иметь магик 1,
нужно открывать позиции с магиком 2 - устанавливаем магик 2, последующие позиции будут иметь магик 2,
нужно открывать позиции с магиком 3 - устанавливаем магик 3, последующие позиции будут иметь магик 3,
Изначально было так, не помогает. Но в примерах обычно стоит в OnInit поэтому перенес. Давно с этим вожусь, стоят совы на тесте вроде всё ровно идет, вдруг открываешь сервер, а там 20 позиций в одну сторону. Может ли влиять то что проверка открытых позиций не через классы?
Спасибо за быстрый ответ. Но в том то и дело, что магики разные. Таким образом я и определил, что оказывается у второго робота позиции открываются с магиком первого. Как так получается и где он сохраняет магик номер первого советника я не знаю, но хотел бы разобраться.
Так как в классе CTrade нет метода GetExpertMagicNumber, после торговой операции распечатайте этот код:
В данном случае не "лучше", а именно так и нужно - это класс-обёртка для стандартных торговых функций. Он не хранит множественные магики. Поэтому магик ему нужно устанавливать каждый раз перед тем, как, и когда требуется открывать позиции с новым магиком.
В общем последовательность такова:
нужно открывать позиции с магиком 1 - устанавливаем магик 1, последующие позиции будут иметь магик 1,
нужно открывать позиции с магиком 2 - устанавливаем магик 2, последующие позиции будут иметь магик 2,
нужно открывать позиции с магиком 3 - устанавливаем магик 3, последующие позиции будут иметь магик 3,
и т.д. ...
Я выразился так по той причине, что у некоторых может быть иное мнение и тоже рабочее.
В данном случае не "лучше", а именно так и нужно - это класс-обёртка для стандартных торговых функций. Он не хранит множественные магики. Поэтому магик ему нужно устанавливать каждый раз перед тем, как, и когда требуется открывать позиции с новым магиком.
В общем последовательность такова:
нужно открывать позиции с магиком 1 - устанавливаем магик 1, последующие позиции будут иметь магик 1,
нужно открывать позиции с магиком 2 - устанавливаем магик 2, последующие позиции будут иметь магик 2,
нужно открывать позиции с магиком 3 - устанавливаем магик 3, последующие позиции будут иметь магик 3,
и т.д. ...
Вот было так:
if(BuyCount()>0)
{
Print("Уже есть позиция на покупку !!!");
return; // не добавлять к открытой позиции на покупку
}
SL=NormalizeDouble(latest_price.ask - STP*_Point,_Digits);
TP=NormalizeDouble(latest_price.ask + TKP*_Point,_Digits);
m_trade.SetExpertMagicNumber(Magic);
m_trade.Buy(lots1,_Symbol,0,SL,TP,"Lag-MA_IAMA(conversely)_2.5.6.7 + 2");
m_position.Select(_Symbol);
{
ulong myMagic=m_position.Magic();
Print(" Открыта поза Бай с магиком № ",myMagic,", И спредом ",SymbolInfoInteger(_Symbol,SYMBOL_SPREAD));
}
m_trade.SetExpertMagicNumber(Magic); перед открытием позиции или после m_trade.Buy(lots1,_Symbol,0,SL,TP,"Lag-MA_IAMA(conversely)_2.5.6.7 + 2");
Коллеги - подскажите как преобразовать массив типа double в string. Надо для записи его в файл. Вот общий тренировочный код.
инф-ия взята из статьи
Сохранение и загрузка массивов из файла
При сохранении и загрузке массива из файла следует учитывать разницу значений размера массива по первому измерению и общее количество элементов массива. При сохранении массива сначала запишем в файл размер массива (общее количество элементов определяемое функцией ArraySize()), затем весь массив:
Здравствуйте, столкнулся с такой проблемой.
Есть два советника по одному инструменту, с разными магиками соответственно. Магик выставляю через CTrade, открываю позицию соответственно тоже через CTrade. При открытой позиции первого советника его магик присваевается второму советнику (установил проверку после открытии позиции, с.м. ниже), поэтому проверка на наличие открытых позиций не видит своего магика, в дальнейшем открывая множество позиций в одну сторону. Счет стоит на демке, в тестере такое выявить невозможно. Если значение магика сохраняется в классе, может его обнулять нужно, но я не знаю как.
Здравствуйте, столкнулся с такой проблемой.
Есть два советника по одному инструменту, с разными магиками соответственно. Магик выставляю через CTrade, открываю позицию соответственно тоже через CTrade. При открытой позиции первого советника его магик присваевается второму советнику (установил проверку после открытии позиции, с.м. ниже), поэтому проверка на наличие открытых позиций не видит своего магика, в дальнейшем открывая множество позиций в одну сторону. Счет стоит на демке, в тестере такое выявить невозможно. Если значение магика сохраняется в классе, может его обнулять нужно, но я не знаю как.
Пожалуйста, Вставляйте код правильно, а не в виде простыни текста.
По коду: задавайте во входных параметрах каждому советнику СВОЙ магик. Допустим первому задаёте 10001, тогда второму 10002.
Пожалуйста, Вставляйте код правильно, а не в виде простыни текста.
По коду: задавайте во входных параметрах каждому советнику СВОЙ магик. Допустим первому задаёте 10001, тогда второму 10002.
Спасибо за быстрый ответ. Но в том то и дело, что магики разные. Таким образом я и определил, что оказывается у второго робота позиции открываются с магиком первого. Как так получается и где он сохраняет магик номер первого советника я не знаю, но хотел бы разобраться.
Спасибо за быстрый ответ. Но в том то и дело, что магики разные. Таким образом я и определил, что оказывается у второго робота позиции открываются с магиком первого. Как так получается и где он сохраняет магик номер первого советника я не знаю, но хотел бы разобраться.
В этом случае, лучше задавать магик
// выставляем магик m_trade.SetExpertMagicNumber(Magic);перед каждым открытием позиции\ордера, а не в OnInit.В этом случае, лучше задавать магик
перед каждым открытием позиции\ордера, а не в OnInit.В данном случае не "лучше", а именно так и нужно - это класс-обёртка для стандартных торговых функций. Он не хранит множественные магики. Поэтому магик ему нужно устанавливать каждый раз перед тем, как, и когда требуется открывать позиции с новым магиком.
В общем последовательность такова:
и т.д. ...
В этом случае, лучше задавать магик
перед каждым открытием позиции\ордера, а не в OnInit.Изначально было так, не помогает. Но в примерах обычно стоит в OnInit поэтому перенес. Давно с этим вожусь, стоят совы на тесте вроде всё ровно идет, вдруг открываешь сервер, а там 20 позиций в одну сторону. Может ли влиять то что проверка открытых позиций не через классы?
Спасибо за быстрый ответ. Но в том то и дело, что магики разные. Таким образом я и определил, что оказывается у второго робота позиции открываются с магиком первого. Как так получается и где он сохраняет магик номер первого советника я не знаю, но хотел бы разобраться.
Так как в классе CTrade нет метода GetExpertMagicNumber, после торговой операции распечатайте этот код:
так проверите, точно ли разные магики у обоих экспертов.
В данном случае не "лучше", а именно так и нужно - это класс-обёртка для стандартных торговых функций. Он не хранит множественные магики. Поэтому магик ему нужно устанавливать каждый раз перед тем, как, и когда требуется открывать позиции с новым магиком.
В общем последовательность такова:
и т.д. ...
Я выразился так по той причине, что у некоторых может быть иное мнение и тоже рабочее.
В данном случае не "лучше", а именно так и нужно - это класс-обёртка для стандартных торговых функций. Он не хранит множественные магики. Поэтому магик ему нужно устанавливать каждый раз перед тем, как, и когда требуется открывать позиции с новым магиком.
В общем последовательность такова:
и т.д. ...
Вот было так:
m_trade.SetExpertMagicNumber(Magic); перед открытием позиции или после m_trade.Buy(lots1,_Symbol,0,SL,TP,"Lag-MA_IAMA(conversely)_2.5.6.7 + 2");