Sergey:
Надо хотя-бы глобальную секцию показывать, да и OnInit не кисло бы.
Ну и распечатку результата работы программы.
нормализация лота есть ?
как написано выше код нужен почти весь
как написано выше код нужен почти весь
Iurii Tokman:
нормализация лота есть ?
как написано выше код нужен почти весь
нормализация лота есть ?
как написано выше код нужен почти весь
Да, нормализация есть. Параметром функции является расчитываемый размер лота, из другой функции.
Результат работы фукции : размер лота 0
void OnTick() { double oto = LotsByRisk(Risk_,SL_); double Lot = Martin_Lot(oto); Получим сигналы для покупки if(BuySignal() == true) // если есть сигнал на покупку { // Alert("получен сигнал на покупку"); if(m_position.Select(_Symbol)) // если уже существует позиция по этому символу { if(m_position.PositionType()==POSITION_TYPE_SELL) m_trade.PositionClose(_Symbol); // и тип этой позиции Sell, то закрываем ее if(m_position.PositionType()==POSITION_TYPE_BUY) return; // а если тип этой позиции Buy, то выходим } //--- Вычисляем стопы if(SL_==0) stop=0; else stop=NormalizeDouble(Ask-SL_*_Point,_Digits); if(TP_==0) take=0; else take=NormalizeDouble(Ask+TP_*_Point,_Digits); m_trade.Buy(Lot,_Symbol,Ask,stop,take); //если дошли сюда, значит позиции нет, открываем ее Alert("позиции на покупку нет, открываем ее"); }
А глобальная секция? А распечатка?
мда...
нужно в клуб телепатов
Алексей Тарабанов:
А глобальная секция? А распечатка?
А глобальная секция? А распечатка?
Глобальная секция
input double Risk_ = 3; // риск на сделку,% input int TP_ = 300; input int SL_ = 300; input bool InpMartin = true; // флаг использовать Мартингейл input double KLot = 1.3; // коэффициент увеличения объема позиции; input int InpMartinOrdinalNumber = 2; // порядковый номер убыточной сделки, начиная с которой будет производится увеличение объема;
Журнал ничего не показывает, ошибок нет. Для всех функций делал распринтовку. Все корректно работает, за исключение функции Martin_Lot. Думаю ошибка логическая, но сам найти не могу..
а эта функция где?
LotsByRisk(Risk_,SL_);
Это что?
if((ticket=HistoryDealGetTicket(i))>0) // тикет сделки номер(i)
Renat Akhtyamov:
а эта функция где?
double LotsByRisk(double risk,int sloss) { double lot_min = SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN); double lot_max = SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX); double lot_step = SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP); double lotcost = ((SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_VALUE)*_Point)/(SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE))); double lot = 0; double UsdPerPip = 0; lot = AccountInfoDouble(ACCOUNT_BALANCE)*risk/100; UsdPerPip = lot/sloss; lot = NormalizeDouble(UsdPerPip/lotcost, 2); lot = NormalizeDouble(lot/lot_step, 0) * lot_step; if(lot < lot_min) lot = lot_min; if(lot > lot_max) lot = lot_max; return(lot); }
Алексей Тарабанов:
Это что?
Должна быть проверка на наличие тикета сделки. С этой строкой что-то не то?
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь