Здравствуйте, меня интересует такой вопрос. Предоставляет ли альпари сервер куда можно скинуть свой советник что он тап работал в круглосуточном режиме? Будьте добры ответить в личку.
вопрос по поводу смены периода в программе ... например есть определенная последовательность операторов которую нужно применить к разным периодам .. как понимаю проще это сделать в форме цикала ... меняя период ... в жокументации нахожу функцию которая возвращает значение периода.. но функции чтоб его изменить не нахожу ... что я неправильно понимаю ?
bool isCloseLastPosByStop(string sy="", int op=-1, int mn=-1) {// Объявление функции. Передаваемые параметры: sy = символ, op - тип, mn - магикdatetime t; // Переменная содержит время закрытия ордераdouble ocp, osl; // ocp - цена закрытия позиции, osl - цена СтопЛосс закрытой позицииint dg, i, j=-1, k=OrdersHistoryTotal(); // k содержит общее количество ордеров в историиif (sy=="0") sy=Symbol(); // Если в ф-цию передан sy равный 0 или NULL, то использовать символ графикаfor (i=0; i<k; i++) { // Цикл по массиву закрытых ордеровif (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { // Если выбран ордер из массива закрытых ордеров, ...if (OrderSymbol()==sy || sy=="") { // ... если его символ совпадает с нашим, ...if (OrderType()==OP_BUY || OrderType()==OP_SELL) { // ... если его тип Бай или Селл, ...if (op<0 || OrderType()==op) { // ... если тип ордера равен или -1 (имеется ввиду любой) или равен переданному в ф-цию, ...if (mn<0 || OrderMagicNumber()==mn) { // ... если его магик или любой (-1) или равен переданному в ф-цию (магику советника), ...if (t<OrderCloseTime()) { // ... если переменная t содержит время закрытия меньше, чем время закрытия выбранного ордера, то ...
t=OrderCloseTime(); // ... то присвоим переменной t время закрытия выбранного ордера (этот ордер закрыт позже предыдущего)
j=i; // Запишем в переменную j индекс найденного ордера с максимальным временем закрытия
}
}
}
}
}
}
} // По окончании цикла в переменной j находится индекс последнего закрытого ордераif (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) { // Выберем его по индексу
dg=MarketInfo(sy, MODE_DIGITS); // Количество цифр после десятичного точки в цене инструмента, заданного переменной syif (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2; // Честно... точно не скажу, но вижу, что корректировка под йену
ocp=NormalizeDouble(OrderClosePrice(), dg); // Нормализуем цену закрытия ордера для дальнейшего сравнения с ценой СтопЛосс
osl=NormalizeDouble(OrderStopLoss(), dg); // Нормализуем цену СтопЛосс ордера для сравнения с ценой закрытияif (ocp==osl) return(True); // Если эти цены равны, значит поза закрыта по стопу, возвращаем значение "Истина"
}
return(False); // Возвращаем "Ложь"
}
Вот и вся логика... Правильно Виктор сказал - избыточно, зато максимально просто... :)
Skopcheny: вопрос по поводу смены периода в программе ... например есть определенная последовательность операторов которую нужно применить к разным периодам .. как понимаю проще это сделать в форме цикала ... меняя период ... в жокументации нахожу функцию которая возвращает значение периода.. но функции чтоб его изменить не нахожу ... что я неправильно понимаю ?
спасибо большое просто мне нужно пояснение ... для того чтоб группа операторов работала по определенному периоду достаточно просто перед ними указать один из периодов в том виде в котором они представленны в данной таблице?
Skopcheny: спасибо большое просто мне нужно пояснение ... для того чтоб группа операторов работала по определенному периоду достаточно просто перед ними указать один из периодов в том виде в котором они представленны в данной таблице?
Для того, чтобы верно ответить на ваш вопрос, нужно увидеть хотя бы пример кода, где вам нужно конкретно задать период...
if (count>3) trend="покупка"; if (count<-3) trend="продажа"; if (count<3||count>-3) trend="неопределенность";
return(trend);}
данную функцию надо применить последовательно к разным периодам ... работает если присоеденить советник к окнам в терминале с разными периодами ... впорос в том возможно ли чтоб сам советник обрабатывал несколько разных периодов ...
данную функцию надо применить последовательно к разным периодам ... работает если присоеденить советник к окнам в терминале с разными периодами ... впорос в том возможно ли чтоб сам советник обрабатывал несколько разных периодов ...
Я так понял, вам нужно чтобы ф-ция работала не только с текущим графиком и периодом, но с любым, переданным в неё...
string trend(string sy="", int tf=0)
{
int count,count_change;
double bar_centr;
string trend;
bool clear;
if (sy=="" || sy=="0") sy=Symbol();
if (tf==0) tf=Period();
for (int i=10; i>0; i--)
{
bar_centr = (iHigh(sy,tf,i)-iLow(sy,tf,i))/2+iLow(sy,tf,i);
if (bar_centr>((iHigh(sy,tf,i+1)-iLow(sy,tf,i+1))/2+iLow(sy,tf,i+1)))
count++;
if (bar_centr<((iHigh(sy,tf,i+1)-iLow(sy,tf,i+1))/2+iLow(sy,tfi+1)))
count--;
}
Print (count,"период ",tf);
if (count>3) trend="покупка";
if (count<-3) trend="продажа";
if (count<3||count>-3) trend="неопределенность";
return(trend);
}
Вызывайте вашу функцию теперь так:
trend(Symbol(), Period()); // Вернёт значения для того графика и периода, в окне которого висит советник...
trend(USDJPY, PERIOD_D1); // Вернёт значения для символа USDJPY и периода "1 день"
Вместо PERIOD_D1 можно ввести 1440 - будет то же самое...
Если её вызвать без параметров, то ф-ция вернёт значения для текущего символа и периода (они заданы по-умолчанию)
чё то не пашет, возможно мне надо что менять здесь или ставить после старта.
я ваш код пытался перевести на бумаге на русский мне понятный язык, но не доходит,
слишком уж сложно,особенно когда условия в каждом последующим,и одно условии из восьми условий
конечно я не спорю тот кто создал такой код просто чудо,но для меня это полное извращение(в хорошем смысле)
кому не лень дописать коментарии к каждой операции и условии,кроме станд.функции.
Небольшая избыточность в коде присутствует, но код вполне читаемый
Здравствуйте, меня интересует такой вопрос. Предоставляет ли альпари сервер куда можно скинуть свой советник что он тап работал в круглосуточном режиме? Будьте добры ответить в личку.
Не пашет что-то у вас, а никак не этот код... :)
Вот и вся логика... Правильно Виктор сказал - избыточно, зато максимально просто... :)
вопрос по поводу смены периода в программе ... например есть определенная последовательность операторов которую нужно применить к разным периодам .. как понимаю проще это сделать в форме цикала ... меняя период ... в жокументации нахожу функцию которая возвращает значение периода.. но функции чтоб его изменить не нахожу ... что я неправильно понимаю ?
Период графика может быть любым из следующих величин:
спасибо большое просто мне нужно пояснение ... для того чтоб группа операторов работала по определенному периоду достаточно просто перед ними указать один из периодов в том виде в котором они представленны в данной таблице?
Для того, чтобы верно ответить на ваш вопрос, нужно увидеть хотя бы пример кода, где вам нужно конкретно задать период...
string trend()
{int count,count_change;
double bar_centr;
string trend;
bool clear;
for (int i=10;i!=0;i--)
{
bar_centr = (High[i]-Low[i])/2+Low[i];
if (bar_centr>((High[i+1]-Low[i+1])/2+Low[i+1]))
count++;
if (bar_centr<((High[i+1]-Low[i+1])/2+Low[i+1]))
count--;
}
Print (count,"период ",Period());
if (count>3) trend="покупка";
if (count<-3) trend="продажа";
if (count<3||count>-3) trend="неопределенность";
return(trend);}
данную функцию надо применить последовательно к разным периодам ... работает если присоеденить советник к окнам в терминале с разными периодами ... впорос в том возможно ли чтоб сам советник обрабатывал несколько разных периодов ...
данную функцию надо применить последовательно к разным периодам ... работает если присоеденить советник к окнам в терминале с разными периодами ... впорос в том возможно ли чтоб сам советник обрабатывал несколько разных периодов ...
Я так понял, вам нужно чтобы ф-ция работала не только с текущим графиком и периодом, но с любым, переданным в неё...
Вызывайте вашу функцию теперь так:
trend(Symbol(), Period()); // Вернёт значения для того графика и периода, в окне которого висит советник...
trend(USDJPY, PERIOD_D1); // Вернёт значения для символа USDJPY и периода "1 день"
Вместо PERIOD_D1 можно ввести 1440 - будет то же самое...
Если её вызвать без параметров, то ф-ция вернёт значения для текущего символа и периода (они заданы по-умолчанию)
Я так понял, вам нужно чтобы ф-ция работала не только с текущим графиком и периодом, но с любым, переданным в неё...
Вызывайте вашу функцию теперь так:
trend(Symbol(), Period()); // Вернёт значения для того графика и периода, в окне которого висит советник...
trend(USDJPY, PERIOD_D1); // Вернёт значения для символа USDJPY и периода "1 день"
Вместо PERIOD_D1 можно ввести 1440 - будет то же самое...
исчерпывающий ответ... спасибо большое ...