Новая версия Trade.mq4:
- введен контроль максимального размера открываемой позиции;
- размер лота от 0,01.
//+------------------------------------------------------------------+ //| 14.09.2007 | //| - введен контроль максимального размера открываемой позиции | //| - размер лота от 0,01 | //+------------------------------------------------------------------+ #property copyright "Max Berilo" #property library //---- #include <stdlib.mqh> #include <WinUser32.mqh> //+------------------------------------------------------------------+ //| trade function | //+------------------------------------------------------------------+ int Trade(string smb, int TimeFrame, int cmd, bool ShowQ, int Slippage, bool SetProfit, double MaxRiskPercent, int RiskAtrPeriod, double RiskMulATR, double ProfitToLossRatio) { if(IsConnected() && ((cmd == OP_BUY) || (cmd == OP_SELL))) { double pnt = MarketInfo(smb, MODE_POINT); int dgt = MarketInfo(smb, MODE_DIGITS); int spread = MarketInfo(smb, MODE_SPREAD); int stoplevel = MarketInfo(smb, MODE_STOPLEVEL); double minlot = MarketInfo(smb, MODE_MINLOT); double tickval = MarketInfo(smb, MODE_TICKVALUE); RefreshRates(); //---- calculating lot size & stop-loss int SL = MathFloor(RiskMulATR * iATR(smb, TimeFrame, RiskAtrPeriod, 0) / pnt); if(SL < stoplevel) SL = stoplevel; SL += spread; double RiskAmount = AccountFreeMargin() * MaxRiskPercent / 100.0; double OptLot = MathFloor(RiskAmount / (tickval * SL * minlot)) * minlot; if(MarketInfo(smb, MODE_MARGINREQUIRED) * OptLot > AccountFreeMargin()) { OptLot = MathFloor(AccountFreeMargin() / (MarketInfo(smb, MODE_MARGINREQUIRED) * minlot)) * minlot; } if(OptLot < minlot) { OptLot = minlot; if(OptLot * SL * tickval > RiskAmount) { SL = MathFloor(RiskAmount / (OptLot * tickval)); if(SL < stoplevel + spread) SL = stoplevel + spread; } } RiskAmount = OptLot * SL * tickval; //---- string msg; double OpenPrice = 0, StopLoss = 0, TakeProfit = 0; if(cmd == OP_BUY) { OpenPrice = MarketInfo(smb, MODE_ASK); StopLoss = NormalizeDouble(OpenPrice - SL * pnt, dgt); if(SetProfit) TakeProfit = NormalizeDouble(OpenPrice + ProfitToLossRatio * SL * pnt, dgt); if(ShowQ) msg = "BUY "; } else if(cmd == OP_SELL) { OpenPrice = MarketInfo(smb, MODE_BID); StopLoss = NormalizeDouble(OpenPrice + SL * pnt, dgt); if(SetProfit) TakeProfit = NormalizeDouble(OpenPrice - ProfitToLossRatio * SL * pnt, dgt); if(ShowQ) msg = "SELL "; } //---- if(ShowQ) { msg = msg + DoubleToStr(OptLot, 3) +" "+smb+ " At " +DoubleToStr(OpenPrice, dgt)+ " StopLoss " +DoubleToStr(StopLoss, dgt); if(SetProfit) { msg = msg + " TakeProfit "+DoubleToStr(TakeProfit, dgt); } msg = msg + " Slippage " +DoubleToStr(Slippage, 0) +"\n"+ "Risk amount " +DoubleToStr(RiskAmount, 2) +" " +AccountCurrency()+ " ("+DoubleToStr(100.0 * RiskAmount / AccountFreeMargin(), 2)+"%)"+" ?"; if(MessageBox(msg, "Buy/Sell script", MB_YESNO|MB_ICONEXCLAMATION) != IDYES) { return(1); } } int ticket = OrderSend(smb, cmd, OptLot, OpenPrice, Slippage, StopLoss, TakeProfit, NULL, TimeFrame); if(ticket < 1) { int error = GetLastError(); Print("Error = ",ErrorDescription(error)); return(1); } else { OrderPrint(); } //---- } return(0); } //+------------------------------------------------------------------+
З.ы.: а то как-то не выходит...
Первый раз ответ писал в Opere, текст оказался неформатированным. То же, но в IE.
1. в настройках MetaTrader Меню "Сервис"->"Натсройка" на вкладке "Советники" проверяем, что включены опции "Включить советники" и "Разрешить советнику торговать".
2. при запуске скриптов Byu/Sell смотрим на вкладке "Эксперты"
терминала (Ctrl+T) наличие строк типа:
2007.09.22 11:32:39 Buy NZDUSD,M30: removed
2007.09.22 11:32:39 Trade NZDUSD,M30: removed
2007.09.22 11:32:39 stdlib NZDUSD,M30: removed
2007.09.22 11:32:39 Trade NZDUSD,M30: Error = trade is disabled
2007.09.22 11:32:39 stdlib NZDUSD,M30: loaded successfully
2007.09.22 11:32:35 Trade NZDUSD,M30: loaded successfully
2007.09.22 11:32:35 Buy NZDUSD,M30: loaded successfully
Здесь 3 первые и 3 последние строки - загрузка используемых библиотек
(если этих строк нет - то, видимо, дело в отсутствии этих самых
библиотек),
строка вида "Error = ..." - сообщение от ошибке.
3. Сообщение "Error = price changed" (код ошибки - 135) сообщает об измении
котировок с момента запуска скрипта, можно попытаться еще раз
запустить скрипт,
или увеличить параметр "Проскальзывание".
4. скрипты проверялись/отлаживались на демо, все работало.
5. мною предполагается использование этих скриптов для ручного открытия позиции с дальнейшим авто-тралом советником(экспертом) по алгоритму смещенного EMA(Close). Для расчета EMA и смещения используется таймфрейм, задаваемый в MagicNumber. Идея показалась интересной, потому и решил поделиться.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
ММ % волатильности:
Author: max12