[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 451
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Понимаю что додумывать не хочется, но может хоть намекнете, если проблема Вам ясна?
Приведите весь код
Нет, это означает только то, что данные совпали с кусочком истории.
Вы же могли вбить их вручную например. Или записать из текстового файла. Или получить при расчете.
Ведь даже вбив туда некие условные данные "1.25 1.16 1.73 1.35" мы может попасть на историю по какой-то валюте много лет назад. Но это же не означает, что мы организовали массив-таймсерию
Немного подправил исходный скрипт:
1. Скопировал в пользовательский массив всего 5 последних цен открытия.
2. Рас-Comment-овал полученный пользовательский массив по всем 5 скопированным ценам открытия.
Получил вот что:
Как видно из рисунка, цены открытия проиндексированы в обратном порядке (о чем свидетельствует НОМЕР цены открытия бара (идет в ВОЗРАСТАЮЩЕМ порядке) и ВРЕМЯ цены открытия бара (идет в УБЫВАЮЩЕМ порядке)), т.е. массив организован как массив-таймсерия.
НО функция ArrayGetAsSeries тем не менее возвращает значение 0 (ложь), что означает: пользовательский массив НЕ организован как массив-таймсерия.
Очень прошу внести ясность
Вопрос: как это объяснить?
P.S. Благодарю за ответы на мои вопросы
Немного подправил исходный скрипт:
1. Скопировал в пользовательский массив всего 5 последних цен открытия.
2. Рас-Comment-овал полученный пользовательский массив по всем 5 скопированным ценам открытия.
Получил вот что:
Как видно из рисунка, цены открытия проиндексированы в обратном порядке (о чем свидетельствует НОМЕР цены открытия бара (идет в ВОЗРАСТАЮЩЕМ порядке) и ВРЕМЯ цены открытия бара (идет в УБЫВАЮЩЕМ порядке)), т.е. массив организован как массив-таймсерия.
НО функция ArrayGetAsSeries тем не менее возвращает значение 0 (ложь), что означает: пользовательский массив НЕ организован как массив-таймсерия.
Очень прошу внести ясность
Вопрос: как это объяснить?
P.S. Благодарю за ответы на мои вопросы
Не пробовали воспользоваться функций
Не пробовали воспользоваться функций
i_maTF == Period() ??????,
i_maPeriod принимает разумное значение???
Ну может быть с i_maShiftByPrice что-нибудь не так???
Точнее трудно сказать.
Выводит не верную информацию. Вот полный код:
В журнале экспертов выдаёт вот что:
Как видно, переменные i_maTF, i_maPeriod и i_maPrice не такие, как я инициализировал. Что не так?
Выводит не верную информацию. Вот полный код:
В журнале экспертов выдаёт вот что:
Как видно, переменные i_maTF, i_maPeriod и i_maPrice не такие, как я инициализировал. Что не так?
Интересно, как Вам удалось что-либо получить в лог, если представленный Вами код не компилируется???
А, если его скомпилировать, то никаких странностей не будет.
Интересно, как Васм удалось что-либо получить в лог, если представленный Вами код не компилируется???
А, если его скомпилировать, то никаких странностей не будет.
У меня всегда всё компилится обычно.
Я почистил код от лишних принтов и переменных, чтоб не путать никого. Но ниже не убрал их видать, вот и не скомпилился. Вот полный код, который компилится:
Помогите пожалуйста! Как сделать так чтобы в советнике при открытии нового ордера закрывался старый? В тестере работает нормально, а на реале почему-то при открытии нового, старый оставляет???????? В программировании я ноль ваще(((
//ooooooooooooooooooooooooooooooooooooooooooooooooo
extern bool In_BUY=true;
extern int SL_buy=62; //---входные параметры по лонгам
extern int Risk_buy=0;
//ooooooooooooooooooooooooooooooooooooooooooooooooo
extern bool In_SELL=true;
extern int SL_sell=62; //---входные параметры по шортам
extern int Risk_sell=0;
//ooooooooooooooooooooooooooooooooooooooooooooooooo
//---- other parameters
static int prevtime=0;
int ticket=0;
int x=1;
//----------------------------------------------
int Magic_BUY =123;
int Magic_SELL =321;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
if(Digits == 5) x=10;
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//oooooooooooooooooooooooooooooooooooooooooooooooooooo
if (Time[0] == prevtime) return(0);
prevtime = Time[0];
if (!IsTradeAllowed()) {
prevtime=Time[1]; MathSrand(TimeCurrent());Sleep(30000 + MathRand()); //--- формировка бара---
}
//ooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
Trade( Magic_BUY, In_BUY,Ask,0,2, SL_buy, Risk_buy); //---торговля по лонгам
Trade(Magic_SELL,In_SELL,Bid,2,0, SL_sell,Risk_sell); //---торговля по шортам
//ooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
return(0);//-----------выход из стартовой функции------------
}
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
void Trade(int mn,bool flag,double price,int period_1,int period_2,int sl,int Risk) {
int total=OrdersTotal();
for (int i = 0; i < total; i++) { OrderSelect(i, SELECT_BY_POS, MODE_TRADES);//---проход по ордерам--
if (OrderSymbol() == Symbol() && OrderMagicNumber() == mn) {
if(Open[period_2]>Open[period_1]) { //----условие закрытия ордера---------
OrderClose(OrderTicket(),OrderLots(),price,5*x); RefreshRates();
}
return(0);
}
}
//ooooooooooooooooooooooooooooooooooooooooooooooooooo
ticket = -1;
if ( flag &&
Open[period_1]>Open[period_2] && //----вход в рынок по условию---
OrdersTotal()<2 && //-----ограничения чемпионата------
AccountEquity()>200 &&
IsTradeAllowed()) {
if (mn<200) {
ticket= OrderSend(Symbol(), OP_BUY,lot(Risk_buy),Ask,5,Bid-x*sl*Point,0,DoubleToStr(mn,0),mn,0,Blue);
}
else {
ticket= OrderSend(Symbol(),OP_SELL,lot(Risk_sell),Bid,5,Ask+x*sl*Point,0,DoubleToStr(mn,0),mn,0, Red);
}
RefreshRates();
if ( ticket < 0) { Sleep(30000); prevtime = Time[1]; }
} //-- Exit ---
return(0); }
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
double lot(int R) { if (R<0)R=0; if (R>80)R=80; //------корректность ввода -------
double minlot = MarketInfo(Symbol(), MODE_MINLOT);
int o = MathAbs(MathLog(minlot) *0.4343) + 0.5;
double lot = minlot;
//ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
lot = NormalizeDouble(AccountFreeMargin() * 0.00001*R, o);//---
if (AccountFreeMargin() < lot * MarketInfo(Symbol(), MODE_MARGINREQUIRED)) {
lot = NormalizeDouble(AccountFreeMargin() / MarketInfo(Symbol(), MODE_MARGINREQUIRED), o);
}
//ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
if(lot < minlot) lot = minlot;
double maxlot =MarketInfo(Symbol(), MODE_MAXLOT);
if(lot > maxlot) lot = maxlot;
return(lot); }
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_end_film_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Или возможно написать другой советник который бы работал по принципу, 1 открылся, 2 открылся-1закрылся, 3открылся-2закрылся и т.д. Помогите очень-очень надо!!!
Помогите пожалуйста! Как сделать так чтобы в советнике при открытии нового ордера закрывался старый? В тестере работает нормально, а на реале почему-то при открытии нового, старый оставляет???????? В программировании я ноль ваще(((
//ooooooooooooooooooooooooooooooooooooooooooooooooo
extern bool In_BUY=true;
extern int SL_buy=62; //---входные параметры по лонгам
extern int Risk_buy=0;
Замени
на
Моя цель на данном этапе - понять как работает та или иная функции, а в данном конкретном случае - как работает функция ArrayGetAsSeries. Я понимаю, что можно использовать функцию ArraySetAsSeries с параметром set=true, к-я принудительно установит индексирование, как в массиве-таймсерии. Но я хочу понять, почему в моем случае функция ArrayGetAsSeries вернула 0, хотя внешне массив выглядит, как таймсерия (т.е. проиндексирован, как таймсерия)
Именно потому, что он только ВЫГЛЯДИТ как таймсерия.
Это только Ваше Личное мнение. А забив туда числа 1, 2, 1.2, 2.1 вы попадете на таймсерию для свинины 1927-го года (число условны). Но от этого массив таймсерией не станет - вам надо указать это явно соответствующей функцией