//+------------------------------------------------------------------+//| TradeAlgorithms.mqh |//| Copyright © 2013, Nikolay Kositsin |//| Khabarovsk, farria@mail.redcom.ru |//+------------------------------------------------------------------+//| Algoritmos de negociação para os corretores oferecendo zero propagação não! |//+------------------------------------------------------------------+#property direitos autorais "2013, Nikolay Kositsin"#property link "farria@mail.redcom.ru"#property versão 1.21"//+------------------------------------------------------------------+//| Enumeração para o cálculo do lote |//+------------------------------------------------------------------+enum MarginMode / / tipo constantes para funções de variável comércio de Margin_Mode { FREEMARGIN = 0, / / MM dos fundos disponíveis na conta MM, o saldo do saldo dos fundos na conta LOSSFREEMARGIN, / / MM nas perdas de fundos disponíveis na conta LOSSBALANCE, / / MM nas perdas do saldo da conta Monte / / muito sem alterar };//+------------------------------------------------------------------+//| O algoritmo para determinar o início de um novo bar |//+------------------------------------------------------------------+ classe CIsNewBar { //----público: -deteção do início de uma nova barra de bool IsNewBar (símbolo de cadeia de caracteres, ENUM_TIMEFRAMES prazo) { -o tempo de aparecimento da barra atual DateTime datetime = Tnovo (SeriesInfoInteger (símbolo, prazo, SERIES_LASTBAR_DATE)); Se (Tnovo! = m_TOld & & Tnovo) //check para um novo bar { m_TOld = Tnovo; Return(true); ПОЯВИЛСЯ НОВЫЙ TWISTER! } //---- Return(false); НОВЫХ БАРОВ ПОКА НЕТ! }; ---КОНСТРУКТОР КЛАССА CIsNewBar() {m_TOld =-1;};protegido: datetime m_TOld; //---- };//+==================================================================+//| АЛГОРИТМЫ ДЛЯ ТОРГОВЫХ ОПЕРАЦИЙ |//+==================================================================+//+------------------------------------------------------------------+//| ОТКРЫВАЕМ ДЛИННУЮ ПОЗИЦИЮ |//+------------------------------------------------------------------+bool BuyPositionOpen(bool & BUY_Signal, / / флаг разрешения на сделкуsímbolo de cadeia de caracteres const, / / торговая пара сделкиconst datetime & TimeLevel, / / время, после которого будет осуществлена следущая сделка после текущейduplo Money_Management, / / MMint Margin_Mode, / / способ расчёта величины лотаdesvio de uint, / / слиппажint StopLoss, / / стоплосс в пунктахint Takeprofit / / тейкпрофит в пунктах)BuyPositionOpen(BUY_Signal,symbol,TimeLevel,Money_Management,deviation,Margin_Mode,StopLoss,Takeprofit); {//---- If (!. Return(true) de BUY_Signal); ENUM_POSITION_TYPE PosType = POSITION_TYPE_BUY;---ПРОВЕРКА НА ИСТЕЧЕНИЕ ВРЕМЕННОГО ЛИМИТА ДЛЯ ПРЕДЫДУЩЕЙ СДЕЛКИ И ПОЛНОТЫ ОБЪЁМА If (!. TradeTimeLevelCheck(symbol,PosType,TimeLevel)) return(true);---ПРОВЕРКА НА НА НАЛИЧИЕ ОТКРЫТОЙ ПОЗИЦИИ If(PositionSelect(Symbol)) return(true);//---- volume=BuyLotCount(symbol,Money_Management,Margin_Mode,StopLoss,deviation) duplo; se (volume < = 0) { Print(__FUNCTION__,"(): Неверный объём для структуры торгового запроса"); Return(false); }---ОБЪЯВЛЕНИЕ СТРУКТУР ТОРГОВОГО ЗАПРОСА И РЕЗУЛЬТАТА ТОРГОВОГО ЗАПРОСА Solicitação de MqlTradeRequest; Resultado de MqlTradeResult;---ОБЪЯВЛЕНИЕ СТРУКТУРЫ РЕЗУЛЬТАТА ПРОВЕРКИ ТОРГОВОГО ЗАПРОСА Seleção de MqlTradeCheckResult;---ОБНУЛЕНИЕ СТРУКТУР ZeroMemory(request); ZeroMemory(result); ZeroMemory(check); dígito de tempo; ponto duplo, Ask;//---- If (!. SymbolInfoInteger(symbol,SYMBOL_DIGITS,digit)) return(true); If (!. SymbolInfoDouble(symbol,SYMBOL_POINT,point)) return(true); If (!. SymbolInfoDouble(symbol,SYMBOL_ASK,Ask)) return(true);---Инициализация структуры торгового запроса MqlTradeRequest для открывания BUY позиции Request.Type = ORDER_TYPE_BUY; Request.Price = perguntar; Request.Action = TRADE_ACTION_DEAL; Request.Symbol = símbolo; Request.volume = volume;---ОПРЕДЕЛЕНИЕ РАССТОЯНИЯ ДО СТОПЛОССА В ЕДИНИЦАХ ЦЕНОВОГО ГРАФИКА If(stoploss) { If (!. StopCorrect(symbol,StopLoss))return(false); Double dStopLoss = StopLoss * ponto; Request.SL=NormalizeDouble(Request.Price-dStopLoss,int(digit)); } mais request.sl=0.0;---ОПРЕДЕЛЕНИЕ РАССТОЯНИЯ ДО ТЕЙКПРОФИТА ЕДИНИЦАХ ЦЕНОВОГО ГРАФИКА If(takeprofit) { If (!. StopCorrect(symbol,Takeprofit))return(false); Double dTakeprofit = Takeprofit * ponto; Request.TP=NormalizeDouble(Request.Price+dTakeprofit,int(digit))
sendo traduzido, aguarde..
