Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 1094

 
alvlaf:

Ты советник вручную на графики цепляешь и тебе надо, чтобы на КАЖДОМ из графиков он открывал MaxOpenOrders ордеров или ВСЕГО MaxOpenOrders ордеров? И каких ордеров: только рыночных или всех, включая limit и stop?

 
A13ksandr:

Ты советник вручную на графики цепляешь и тебе надо, чтобы на КАЖДОМ из графиков он открывал MaxOpenOrders ордеров или ВСЕГО MaxOpenOrders ордеров? И каких ордеров: только рыночных или всех, включая limit и stop?

Нужно чтоб открывал всего для всех инструментов. Допустим  MaxOpenOrders равен 1 должен открывать только один рыночный ордер. Это бот для бинарных опционов, там нет никаких отложенных ордеров. Правда, он работает сериями, если позиция закрывается в убытке, то открывается такая же только с увеличенным лотом и пока серия не закончится  прибыльной сделкой не должны открываться никакие сделки по другим инструментам. 
 
A13ksandr:
С какой целью выделены слова "в этой стратегии"? Magic нужен, если на счете заключаются сделки вручную или еще другой советник запущен, чтобы эти ордер не трогать. По-моему так.
Да, спасибо, A13ksandr, и еще при отладке я меняю магик, чтоб не дожидаться окончания убыточной серии, да и если просто убрать магик,  это не изменит алгоритма работы бота. В ручную открывать ордера я там не планирую.
 
alvlaf:
Нужно чтоб открывал всего для всех инструментов. Допустим  MaxOpenOrders равен 1 должен открывать только один рыночный ордер. Это бот для бинарных опционов, там нет никаких отложенных ордеров. Правда, он работает сериями, если позиция закрывается в убытке, то открывается такая же только с увеличенным лотом и пока серия не закончится  прибыльной сделкой не должны открываться никакие сделки по другим инструментам. 

Ок, про бинарные опционы я упустил. Мне почему-то кажется, что если вручную цеплять на разные графики один и тот же советник, то всё равно будет считаться, что запущены разные советники. И для КАЖДОГО графика будет запускаться 1 опцион (ну когда работать будет как надо). Могу ошибаться, т.к. сам новичок. Я вопрос мультивалютности делал в самом советнике вот таким образом: 

input string TradeSymbols = "EURUSD, GBPUSD, AUDUSD, NZDUSD, USDCAD, USDCHF, GBPCAD"; // символы для торговли

string Symbols[50]; // 50 -максимально возможное количество символов

int SymbolCount;

//-------------------------------------------------- 

int OnInit()

{

   if (IsTesting() || !ExtractSymbols())

   {

      SymbolCount = 1;

      Symbols[0] = Symbol();

   }

   return(INIT_SUCCEEDED);

}

//--------------------------------------------------

bool ExtractSymbols()

{

   ushort Comma = StringGetCharacter(",", 0);

   SymbolCount = StringSplit(TradeSymbols, Comma, Symbols);

   for (int i = 0; i < SymbolCount; i++)

   {

      StringToUpper(Symbols[i]);

      Symbols[i] = StringTrimRight(Symbols[i]); // защита от случайных пробелов

      Symbols[i] = StringTrimLeft(Symbols[i]);

   }

   if (SymbolCount > 0) return(true);

   return(false);

}

//--------------------------------------------------

void OnTick()

{

   for (int i = 0; i < SymbolCount; i++)

   {

       double LastAsk = SymbolInfoDouble(Symbols[i], SYMBOL_ASK);

       double LastBid = SymbolInfoDouble(Symbols[i], SYMBOL_BID);

       // и так далее... 

   } 

}

Цеплять советник на любой график. Так точно MaxOpenOrders будет для всех графиков.

 
 // и так далее...  - в смысле дальше идет прежний код самого советника?
 
A13ksandr:

Ок, про бинарные опционы я упустил. Мне почему-то кажется, что если вручную цеплять на разные графики один и тот же советник, то всё равно будет считаться, что запущены разные советники. И для КАЖДОГО графика будет запускаться 1 опцион (ну когда работать будет как надо). Могу ошибаться, т.к. сам новичок. Я вопрос мультивалютности делал в самом советнике вот таким образом: 

input string TradeSymbols = "EURUSD, GBPUSD, AUDUSD, NZDUSD, USDCAD, USDCHF, GBPCAD"; // символы для торговли

string Symbols[50]; // 50 -максимально возможное количество символов

int SymbolCount;

//-------------------------------------------------- 

int OnInit()

{

   if (IsTesting() || !ExtractSymbols())

   {

      SymbolCount = 1;

      Symbols[0] = Symbol();

   }

   return(INIT_SUCCEEDED);

}

//--------------------------------------------------

bool ExtractSymbols()

{

   ushort Comma = StringGetCharacter(",", 0);

   SymbolCount = StringSplit(TradeSymbols, Comma, Symbols);

   for (int i = 0; i < SymbolCount; i++)

   {

      StringToUpper(Symbols[i]);

      Symbols[i] = StringTrimRight(Symbols[i]); // защита от случайных пробелов

      Symbols[i] = StringTrimLeft(Symbols[i]);

   }

   if (SymbolCount > 0) return(true);

   return(false);

}

//--------------------------------------------------

void OnTick()

{

   for (int i = 0; i < SymbolCount; i++)

   {

       double LastAsk = SymbolInfoDouble(Symbols[i], SYMBOL_ASK);

       double LastBid = SymbolInfoDouble(Symbols[i], SYMBOL_BID);

       // и так далее... 

   } 

}

Цеплять советник на любой график. Так точно MaxOpenOrders будет для всех графиков.

Этот код на MQL5 написан?
 
A13ksandr:
            if (DayOfWeek() == 1) Price = iOpen(Symbol(), PERIOD_D1, 4);
            if (DayOfWeek() >= 2) Price = iOpen(Symbol(), PERIOD_D1, DayOfWeek() - 2);

а если следующая неделя пошла, а мне нужно все еще вести отчет от цены открытия бара вторника прошлой недели? т.е. мне нужно так, чтобы советник определил цену открытия бара во вторник и отталкивался от нее столько времени,сколько нужно, например - неделя, две, месяц и т.д.

Спасибо. 

 
yaaarik777:

а если следующая неделя пошла, а мне нужно все еще вести отчет от цены открытия бара вторника прошлой недели? т.е. мне нужно так, чтобы советник определил цену открытия бара во вторник и отталкивался от нее столько времени,сколько нужно, например - неделя, две, месяц и т.д.

Спасибо.

Тогда задаёте конкретную дату и программа берёт цену открытия дня для той даты, это ещё проще даже.

 
evillive:

Тогда задаёте конкретную дату и программа берёт цену открытия дня для той даты, это ещё проще даже.

можете с кодом помочь, я не догоняю то-то.

а может расчет цены открытия первого бара во вторник уложить в OnInit() и он рассчитает цену при запуске и запомнит ее пока советник не перезапустить? как думаете?

если бред пишу, прошу прощения, я только учусь) 

 
yaaarik777:

можете с кодом помочь, я не догоняю то-то.

а может расчет цены открытия первого бара во вторник уложить в OnInit() и он рассчитает цену при запуске и запомнит ее пока советник не перезапустить? как думаете?

если бред пишу, прошу прощения, я только учусь) 

Цена открытия первого бара дня = цена открытия дневного бара. Можно и в ините, если потом не возникнет нужды перерассчитывать это значение.

Код примерно такой:

input datetime dayz=D'2016.09.06 00:00'; //зададим прошлый вторник, начало суток

int bar_dayz=0;
double price_dayz=0;

int OnInit()
{
////...
bar_dayz=iBarshift(_Symbol,PERIOD_D1,dayz); 
price_dayz=iOpen(_Symbol,PERIOD_D1,bar_dayz);
///...
}
Причина обращения: