Здравствуйте! Может ли кто помоч с написанием советника, искал в интернете информацию, но не удолось найти интересующую меня.
Я пытаюсь написать советника, но не как не получается осуществить задуманое.
Мне вот нужно для моего советника зделать ограничение на количество открываемых позиций, например чтобы он открыл 10 покупок и 10 подаж, это у меня получилось, но нужно чтобы он при закрытии например 5 покупок, он снова открыл 5 покупок И 5 ПРОДАЖ, таким образом уже получается 15 продаж и 10 покупок!!! А МОЙ советник при ограничении 10 позиций открывает только 5 покупок потому что 10 продаж уже есть! ((((
Я не как немогу найти подходящую функцию, Напишите пожалуйсто кто знает или посмотрите на мой советник может там косяк какой...
/+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 19.02.2008 | //| Описание : Возвращает количество позиций. | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ int NumberOfPositions(string sy="", int op=-1, int mn=-1) { int i, k=OrdersTotal(), kp=0; if (sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==sy || sy=="") { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) kp++; } } } } } return(kp);
Попробуйте так, если правильно понял Вашу мысль
int start() { int i,count; if (BUY) { if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP=0; if (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); else SL=0; count = 10 - NumberOfPositions(Symbol(),OP_BUY,Magic): if(count>0) { for(int i=0;i<count;i++) OPENORDER ("Buy"); if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); else TP=0; if (stoploss!=0) SL = NormalizeDouble(Bid + stoploss*Point,Digits); else SL=0; for(int i=0;i<10;i++) OPENORDER ("Sell"); } } if (SELL) { if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); else TP=0; if (stoploss!=0) SL = NormalizeDouble(Bid + stoploss*Point,Digits); else SL=0; count = 10 - NumberOfPositions(Symbol(),OP_SELL,Magic): if(count>0) { for(int i=0;i<count;i++) OPENORDER ("Sell"); if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP=0; if (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); else SL=0; for(int i=0;i<10;i++) OPENORDER ("Buy"); } } return(0); }
без этой функции он через каждый тик открывает зделку пока депо хватает
Попробуйте так, если правильно понял Вашу мысль
я пробую пишит 'i' - variable already defined непойму где эт параметр может из за
void CountOrders(int& mo[], int mn=-1) {
int i, k=OrdersTotal();
if (ArraySize(mo)!=6) ArrayResize(mo, 6);
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (mn<0 || OrderMagicNumber()==mn) mo[OrderType()]++;
}
}
}
for(int i=0;i<count;i++)
заменить на for(i=0;i<count;i++)
по привычке написал Int i
dualbit:
Теперь пишит
'if' - too complex expression где if(count>0) стоит
'=' - assignment expected где count = 10 - NumberOfPositions(Symbol(),OP_BUY,Magic): стоит
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте! Может ли кто помоч с написанием советника, искал в интернете информацию, но не удолось найти интересующую меня.
Я пытаюсь написать советника, но не как не получается осуществить задуманое.
Мне вот нужно для моего советника зделать ограничение на количество открываемых позиций, например чтобы он открыл 10 покупок и 10 подаж, это у меня получилось, но нужно чтобы он при закрытии например 5 покупок, он снова открыл 5 покупок И 5 ПРОДАЖ, таким образом уже получается 15 продаж и 10 покупок!!! А МОЙ советник при ограничении 10 позиций открывает только 5 покупок потому что 10 продаж уже есть! ((((
Тоесть: Что бы он открывал столько позиция сколько закрылось по Tp или SL не зависимо от вида позиции Sell или Buy.
ПРИМЕР: было открыто 5 позиций продажи и 7 покупки => 2 покупки закрылось по Sl он должен открыть заного 2 покупки и 2 продажи.
Я не как немогу найти подходящую функцию, Напишите пожалуйсто кто знает или посмотрите на мой советник может там косяк какой...