А чему равень уровень отступа стопов? MarketInfo(Symbol(),MODE_STOPLEVEL)
И на каком символе запущен советник в он-лайне ;)
И лучше вставить распринтовку всех параметров в случае неудачи.
И лучше вставить распринтовку всех параметров в случае неудачи.
Забавно:
Alert("Stops=",MarketInfo(Symbol(),MODE_STOPLEVEL));
дает Stops=0
Rosh писал (а):
И на каком символе запущен советник в он-лайне ;)
И лучше вставить распринтовку всех параметров в случае неудачи.
И на каком символе запущен советник в он-лайне ;)
И лучше вставить распринтовку всех параметров в случае неудачи.
Впервые решил попробовать USDJPY :). С этим брокером, у них конкурс еженедельно (название будет сочтено как "недопустимо"?) решил попробовать тоже впервые.
Скрипт на "встать в позу".
//+------------------------------------------------------------------+ //| Open_SELL.mq4 | //| "СКРИПТЫ ДЛЯ ЛЕНИВОГО" | //| Скрипт открывает SELL в активном окне на сумму | //| залога, задаваемую как часть FreeMargin в процентах. | //| При CreateGif=true активное окно после | //| открытия позиции сохраняется как рисунок в | //| ...<Терминал>exspertsfiles<FileName>.gif | //| Bookkeeper, 2006, yuzefovich@gmail.com | //+------------------------------------------------------------------+ #property copyright "" #property link "" #property show_inputs // Если есть желание менять экстерны в процессе //+------------------------------------------------------------------+ extern int Interest = 35; // Выделить процент FreeMargin на позу extern int DistSL = 85; // StopLoss в пунктах extern int DistTP = 100; // TakeProfit в пунктах extern int Slippage = 7; // Проскальзывание в пунктах extern bool StopLoss = true; // Ставить или нет StopLoss extern bool TakeProfit = true; // Ставить или нет TakeProfit extern bool CreateGif = true; // Создать или нет рисунок //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ double MarginCalculate(string symbol,double volume) //+------------------------------------------------------------------+ //| Взято из MarginCalculate.mq4 | //| 'MarginCalculate' | //| Copyright © 2006, MetaQuotes Software Corp. | //+------------------------------------------------------------------+ { string first = StringSubstr(symbol,0,3); string second = StringSubstr(symbol,3,3); string currency = AccountCurrency(); double leverage = AccountLeverage(); double contract = MarketInfo(symbol,MODE_LOTSIZE); double bid = MarketInfo(symbol,MODE_BID); //---- допускаем только стандартные форексные символы XXXYYY if(StringLen(symbol)!=6) { Print("MarginCalculate: '",symbol, "' must be standard forex symbol XXXYYY"); return(0.0); } //---- проверка наличия данных if(bid<=0 || contract<=0) { Print("MarginCalculate: no market information for '", symbol,"'"); return(0.0); } //---- проверяем самые простые варианты - без кроссов if(first==currency) return(contract*volume/leverage); if(second==currency) return(contract*MarketInfo(symbol,MODE_BID)*volume/leverage); //---- проверяем обычные кроссы, ищем прямое преобразование //---- через валюту депозита string base=currency+first; if(MarketInfo(base,MODE_BID)>0) return(contract/MarketInfo(base,MODE_BID)*volume/leverage); //---- попробуем наоборот base=first+currency; if(MarketInfo(base,MODE_BID)>0) return(contract*MarketInfo(base,MODE_BID)*volume/leverage); //---- нет возможности прямого перерасчета Print("MarginCalculate: can not convert '",symbol,"'"); return(0.0); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ void start() { double SL=0, TP=0, Stake, Share, MarginLots; int ticket=0, MinLotDgts, i; double MinLot=MarketInfo(Symbol(),MODE_MINLOT); double MaxLot=MarketInfo(Symbol(),MODE_MAXLOT); double LotStep=MarketInfo(Symbol(),MODE_LOTSTEP); //int Dgts=MarketInfo(Symbol(),MODE_DIGITS); string FileName, str; //---- Share=0.01*Interest; if(Share>1.0) Share=1.0; // Часть не бывает больше целого if(Share<0) Share=0; // (???) // Чему равен MinLot? 0.01, 0.1 или ... if(MinLot<0.1) MinLotDgts=2; else { if(MinLot<1.0) MinLotDgts=1; else MinLotDgts=0; } // Залог на 1 MinLot MarginLots=MarginCalculate(Symbol(),MinLot); if(MarginLots<0.01) return; if(AccountFreeMargin()<MarginLots) { Alert("Open_SELL: No maney..."); return; } // Сколько MinLot'ов разрешили себе позволить на позу? Stake=NormalizeDouble(AccountFreeMargin()*Share/MarginLots,0); // Если выделенная часть депо будет меньше минимально допустимого // лота, поза будет открыта на минимальный лот if(Stake<1) Stake=MinLot; else { Stake=NormalizeDouble(Stake*MinLot,MinLotDgts); // Если выделенная часть депо будет больше максимально // допустимого лота, поза будет открыта на максимальный лот if(Stake>MaxLot) Stake=MaxLot; else while(AccountFreeMargin()<MarginCalculate(Symbol(),Stake)) Stake=Stake-LotStep; } RefreshRates(); if(StopLoss==true) SL=Ask+DistSL*Point; else SL=0; if(TakeProfit==true) TP=Bid-DistTP*Point; else TP=0; ticket=OrderSend(Symbol(),OP_SELL,Stake, // Не смотря на рефреш вместо Bid ставим: NormalizeDouble(MarketInfo(Symbol(),MODE_BID),Digits), Slippage, NormalizeDouble(SL,Digits), NormalizeDouble(TP,Digits), "",0,0,CLR_NONE); if(ticket<0) Alert("Open_SELL LastError: ",GetLastError()); else { if(CreateGif==true) { // рисуем, если заказано datetime curdate=TimeCurrent(); FileName=Symbol()+"_SELL_"+TimeYear(curdate); i=TimeMonth(curdate); if(i<10) { str="0"+i; FileName=FileName+str; } else FileName=FileName+i; i=TimeSeconds(curdate)+ 100*TimeMinute(curdate)+ 10000*TimeHour(curdate)+ 1000000*TimeDay(curdate); if(TimeDay(curdate)<10) { str="0"+i; FileName=FileName+str; } else FileName=FileName+i; FileName=FileName+".gif"; WindowScreenShot(FileName,400,300); } } return; } //+------------------------------------------------------------------+
У меня скрипт все корректно открыл на демо счете по ене и фунтене.
Ошибок в журнале не было.
Ошибок в журнале не было.
Ну тогда звиздец. По четырех знаковым работает, а по Йене - нет
:(.
Bookkeeper:
Ну тогда звиздец. По четырех знаковым работает, а по Йене - нет :(.
Откройте из МаркетВотча окно свойств символа и посмотрите там характеристики. Может у этого брокера на йене нет стоп уровней.
Ну тогда звиздец. По четырех знаковым работает, а по Йене - нет :(.
А ещё для инструментов, находящихся в режиме "исполнение по
рынку" (Market Execution), нельзя сразу устанавливать стопы. Только
функцией OrderModify после открытия ордера
Renat, Stringo - спасибо. Буду проверять.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
дает ошибку 130 . Что не так? (DistSL=85 DistTP=100)