Скрипты: ММ % волатильности

 

ММ % волатильности:

Простая стратегия ММ % волатильности

Author: max12

 

Новая версия 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);
  }
//+------------------------------------------------------------------+
 
Пожалуйста, опишите подробнее, как заставить эту вашу систему работать?

З.ы.: а то как-то не выходит...
 
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. Идея показалась интересной, потому и решил поделиться.
 

Первый раз ответ писал в 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. Идея показалась интересной, потому и решил поделиться.

Причина обращения: