Зато есть другая волшебная кнопа: SRC, при использовании которой код (или его фрагменты) приобретают более ухоженный и читаемый вид в посте задавшего вопрос, добавляя плюс к карме автора вопроса и повышая количество тех, кто посмотрит на этот код и решит по нему помочь.
Только тс-с-с... . Так-то в тайные знания о волшебстве кнопы SRC посвящены, в основном, только чтящие священные тексты мануалы на сайте. Например, такие как эти.
И успеха вам здесь в освоении тайных знаний при решении дальнейших вопросов!
ух тыыыы!!! Голова! Спасибо Большое Вам!!! После исключительно нудной четырех-часовой работы я все таки нашел как приткнуть эту функцию так чтобы тестер не ругался) вышло примерно следующее.
void ChagingLots(int Magic,double percent,double lot)
{
double t=2, //коэффициент при делении,для того чтобы узнать цену закрытия
PriceCl, //цена закрытия части ордера
takeprofit; //нужна для вычисленийint count = 0,order;
for(int i=OrdersTotal()-1;i>=0;i--) //пробегаемся по массиву ордеров
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber() == Magic)
{
if(OrderType()== OP_BUY) //если ордер на покупку
{
takeprofit = OrderTakeProfit(); //вычисляем тейк ордера
PriceCl = NormalizeDouble((takeprofit + OrderOpenPrice())/t,Digits); //примерную цену закрытия
order = OrderTicket(); //получили ордерif(Bid>PriceCl) //если текущая цена оказалась выше нашей цены ,то закрываем часть ордера
{OrderClose(order,NormalizeDouble(lot*percent/100,2),PriceCl,3);}
}
if( OrderType()== OP_SELL )// для продажи аналогично
{
takeprofit = OrderTakeProfit();
PriceCl = NormalizeDouble((takeprofit + OrderOpenPrice())/t,Digits);
order = OrderTicket();
if(Bid<PriceCl)
{OrderClose(order,NormalizeDouble(lot*percent/100,2),Bid,3);}
}
}
}
}
}
Всем привет)
Пытался написать функцию закрытия части позиции.Но когда начинаю прогонять в тестере ,то выскакивает ошибка 138.Не пойму в чем проблема.Помогите пожалуйста.
Тут советник в котором эта функция должна работать)
Пытался написать функцию закрытия части позиции.Но когда начинаю прогонять в тестере ,то выскакивает ошибка 138.Не пойму в чем проблема.Помогите пожалуйста.
Тут советник в котором эта функция должна работать)
Вы посмотрели в Доке, что значит эта ошибка?! Отсюда найдёте ответ!
Пытаюсь дополнить простой советник-трал Кима, что бы после закрытия всех рыночных ордеров он удалял отложенные ордера, не выходит(
вставил функцию удаления ордеров:
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 28.11.2006 |//| Описание : Удаление ордеров |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любой ордер) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+void DeleteOrders(string sy="", int op=-1, int mn=-1) {
bool fd;
int err, i, it, k=OrdersTotal(), ot;
if (sy=="0") sy=Symbol();
for (i=k-1; i>=0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
ot=OrderType();
if (ot>1 && ot<6) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || ot==op)) {
if (mn<0 || OrderMagicNumber()==mn) {
for (it=1; it<=NumberOfTry; it++) {
if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
while (!IsTradeAllowed()) Sleep(5000);
fd=OrderDelete(OrderTicket(), clDelete);
if (fd) {
if (UseSound) PlaySound(SoundSuccess); break;
} else {
err=GetLastError();
if (UseSound) PlaySound(SoundError);
Print("Error(",err,") delete order ",GetNameOP(ot),": ",ErrorDescription(err),", try ",it);
Sleep(1000*5);
}
}
}
}
}
}
}
}
Дальше столкнулся с проблемой которую мне вряд ли осилить, в кодах не силен.
Пытался написать функцию закрытия части позиции.Но когда начинаю прогонять в тестере ,то выскакивает ошибка 138.Не пойму в чем проблема.Помогите пожалуйста.
Тут советник в котором эта функция должна работать)
138 - "Запрошенная цена устарела, либо перепутаны bid и ask."
Цену открытия/закрытия невозможно пересчитать, т.к. она есть, а тут - беда (нужно цену запросить и присовить ей значение с помощью MarketInfo, а эту переназвать другой переменной):
PriceCl = NormalizeDouble((takeprofit + OrderOpenPrice())/t,Digits); //примерную цену закрытия
order = OrderTicket(); //получили ордерif(Bid>PriceCl) //если текущая цена оказалась выше нашей цены ,то закрываем часть ордера
{OrderClose(order,NormalizeDouble(lot*percent/100,2),PriceCl,3);}
sponger:
Жалко, кнопочки "Спасибо" нету(
Зато есть другая волшебная кнопа: SRC, при использовании которой код (или его фрагменты) приобретают более ухоженный и читаемый вид в посте задавшего вопрос, добавляя плюс к карме автора вопроса и повышая количество тех, кто посмотрит на этот код и решит по нему помочь.
Только тс-с-с... . Так-то в тайные знания о волшебстве кнопы SRC посвящены, в основном, только чтящие священные тексты мануалы на сайте. Например, такие как эти.
И успеха вам здесь в освоении тайных знаний при решении дальнейших вопросов!ух тыыыы!!! Голова! Спасибо Большое Вам!!! После исключительно нудной четырех-часовой работы я все таки нашел как приткнуть эту функцию так чтобы тестер не ругался) вышло примерно следующее.
double xm1=(PriceCloseBar-MinLOWPeriod)/(MathMax((MaxHIGHPeriod-MinLOWPeriod)/100,Point));
Print(xm1);
а еще сделал формулу пологичнее;)
Спасибо!
Всем привет)
Пытался написать функцию закрытия части позиции.Но когда начинаю прогонять в тестере ,то выскакивает ошибка 138.Не пойму в чем проблема.Помогите пожалуйста.
Тут советник в котором эта функция должна работать)
Всем привет)
Пытался написать функцию закрытия части позиции.Но когда начинаю прогонять в тестере ,то выскакивает ошибка 138.Не пойму в чем проблема.Помогите пожалуйста.
Тут советник в котором эта функция должна работать)
Вы посмотрели в Доке, что значит эта ошибка?! Отсюда найдёте ответ!
По какой цене закрывается Бай? И Селл?
Приветствую всех
мой вопрос относиться скорее к разработчикам из метаквотес, но всё же...
Сколько баров храниться история? Т.е. с каким максимальным по сдвигу баром можно работать?
Код:
Print(iMA(Symbol(),0,14,0,MODE_SMA,PRICE_CLOSE,1200));
Print(iClose(Symbol(),0,1200));
При тесте такого сдвига, терминал выдаёт для 2х случаев 0.0
,Но
Print(iMA(Symbol(),0,14,0,MODE_SMA,PRICE_CLOSE,120));
Print(iClose(Symbol(),0,120));
При тесте всё работает
Возможно ли как-то регулировать объём доступной истории? Может кто-то сталкивался с такой проблемой и решение уже найдено?
Заранее спасибо!
Всем здравствуйте.
Пытаюсь дополнить простой советник-трал Кима, что бы после закрытия всех рыночных ордеров он удалял отложенные ордера, не выходит(
вставил функцию удаления ордеров:
Дальше столкнулся с проблемой которую мне вряд ли осилить, в кодах не силен.
полагаю нужно написать условие типа:
это просто пример из другого советника
Помогите пожалуйста.
Всем привет)
Пытался написать функцию закрытия части позиции.Но когда начинаю прогонять в тестере ,то выскакивает ошибка 138.Не пойму в чем проблема.Помогите пожалуйста.
Тут советник в котором эта функция должна работать)
138 - "Запрошенная цена устарела, либо перепутаны bid и ask."
Цену открытия/закрытия невозможно пересчитать, т.к. она есть, а тут - беда (нужно цену запросить и присовить ей значение с помощью MarketInfo, а эту переназвать другой переменной):
Всем здравствуйте.
Пытаюсь дополнить простой советник-трал Кима, что бы после закрытия всех рыночных ордеров он удалял отложенные ордера, не выходит(
вставил функцию удаления ордеров:
Дальше столкнулся с проблемой которую мне вряд ли осилить, в кодах не силен.
полагаю нужно написать условие типа:
это просто пример из другого советника
Помогите пожалуйста.