another martingale fix.mq4
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «another martingale fix.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Советник для MetaTrader 4, реализующий торговую стратегию на основе индикатора RSI. Открывает позиции по сигналам перекупленности и перепроданности рынка. Поддерживает фиксированные уровни стоп-лосса и тейк-профита, а также функцию трейлинг-стопа для защиты прибыли.
Встроена система увеличения лота после убыточных сделок в пределах заданного количества последовательных потерь. Дополнительно реализована функция перемещения стоп-лосса в точку безубыточности при достижении позиции определённого уровня прибыли. Торговля ограничена заданным временным окном в течение дня.
Настройки программы
| Настройка | Описание |
|---|---|
| use for identifing order (MagicNumber) | Магический номер — Уникальный идентификатор для отслеживания и фильтрации собственных ордеров на сервере. |
| basic lot (StartLot) | Начальный лот — Базовый размер лота для новых позиций. |
| stop loss (StopLoss) | Стоп-лосс — Фиксированный уровень стоп-лосса в пунктах от цены открытия позиции. |
| take profit (TakeProfit) | Тейк-профит — Фиксированный уровень тейк-профита в пунктах от цены открытия позиции. |
| to moving out stoploss into (TrailingStop) | Трейлинг-стоп — Активирует перемещение стоп-лосса в сторону прибыли при достижении указанного расстояния в пунктах от текущего стоп-лосса. |
| to moving stoploss into (MoveToBreakEvent) | Перемещение в безубыток — Включает функцию переноса стоп-лосса в цену открытия позиции после выхода в прибыль. |
| small amount of pips profit (LockedPips) | Фиксация прибыли — Количество пунктов прибыли, при достижении которого стоп-лосс перемещается в точку безубыточности. |
| amount of bar to calculate (RSIPeriod) | Период RSI — Количество баров, используемых для расчёта индикатора RSI. |
| a level to determine market (UpperLevel) | Верхний уровень RSI — Значение RSI, при превышении которого генерируется сигнал на продажу. |
| same as above but for (LowerLevel) | Нижний уровень RSI — Значение RSI, при снижении ниже которого генерируется сигнал на покупку. |
| false to deactivated this feature (Martingale) | Мартингейл — Включает или выключает функцию увеличения лота после убыточных сделок. |
| previous lotsize will multiplied (Multiplier) | Множитель лота — Коэффициент умножения размера лота при срабатывании функции увеличения позиции. |
| how many continue losses (DeepLevel) | Глубина мартингейла — Максимальное количество последовательных убыточных сделок, после которых увеличение лота прекращается. |
| time for EA start trading (StartHour) | Час начала торговли — Час начала торговой сессии по серверному времени. |
| time for EA stop trading (EndHour) | Час окончания торговли — Час окончания торговой сессии по серверному времени. |
Поиск по коду файла
extern int MagicNumber=1; // use for identifing order
extern double StartLot=0.1; // basic lot
extern int StopLoss=30; // stop loss
extern int TakeProfit=30; // take profit
extern int TrailingStop=0; // to moving out stoploss into
extern bool MoveToBreakEvent=false; // to moving stoploss into
extern int LockedPips=1; // small amount of pips profit
extern int RSIPeriod=9; // amount of bar to calculate
extern int UpperLevel=70; // a level to determine market
extern int LowerLevel=30; // same as above but for
extern bool Martingale=true; // false to deactivated this feature
extern double Multiplier=2.5; // previous lotsize will multiplied
extern int DeepLevel=10; // how many continue losses
extern int StartHour=0; // time for EA start trading
extern int EndHour=20; // time for EA stop trading
double pt, // custom point
stoplevel, // stop level
minlot, // minimal lot
maxlot; // maximal lot
int ordercount() // we counting our order here
{
int total=0; // total of our order
int i; // pos of our order
for(i=0; i<OrdersTotal(); i++) // looping to count our order
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue; // is it right our order?
if(OrderSymbol()!=Symbol() || // if symbol of order didn't match
OrderMagicNumber()!=MagicNumber) // with current chart symbol
continue; // or the magic numb of order
total++; // count if all criteria matched
}
return(total); // this function returned total of
}
bool checkforlosses() // we check our last closed order
{ // from losses here
int losses=0; // total of losses
int i; // pos of our order
for(i=0; i<OrdersHistoryTotal(); i++) // looping to check all of our
{ // order history from pos 0 until
if (!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue; // is it right our order?
if(OrderSymbol()!=Symbol() || // if symbol of order didn't match
OrderMagicNumber()!=MagicNumber) // with current chart symbol
continue; // or the magic numb of order
if(OrderProfit()<0) losses++; // so we count it as a losses 'cause negative profit
else losses=0; // otherwise we leave it as is
}
if(losses>0) return(true); // if last of our order is in losses
return(false); // when there is no losses false will returned
}
double lastlot() // we will find last lot size
{ // order with this function
double lot=0; // lot size
int i; // pos of our order
for(i=0; i<OrdersHistoryTotal(); i++) // looping to check all of our
{ // order history from pos 0 until
if (!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue; // is it right our order?
if(OrderSymbol()!=Symbol() || // if symbol of order didn't match
OrderMagicNumber()!=MagicNumber) // with current chart symbol
continue; // or the magic numb of order
lot=OrderLots(); // last lot
}
return(lot); // last lot size returned
}
double mylot() // we calculate for next lot here
{ // when a loss occured or not
int prec=0; // precision value
double lot, // lot size
maxlotX; // maximal size of martingale lot
minlot=MarketInfo(Symbol(),MODE_MINLOT); // get brokers minimal lot size
maxlot=MarketInfo(Symbol(),MODE_MAXLOT); // get brokers maximal lot size
if(minlot==0.01) prec=2; // get precision value
if(minlot==0.1) prec=1; // get precision value
maxlotX=NormalizeDouble(StartLot*MathPow(Multiplier,DeepLevel), prec); //get max.
if(Martingale) // if martingale activated
{
if(checkforlosses()) // if last order is in losses
{
lot=NormalizeDouble(lastlot()*Multiplier,prec); // martingale lot
}
else
{
lot=StartLot; // normal lot
}
}
else
{
lot=StartLot; // normal lot
}
if(lot>maxlot) return(StartLot); // if lot size is bigger than broker rules,
if(lot>maxlotX) return(StartLot); // if lot size is bigger than martingale level,
if(lot<minlot) return(minlot); // if lot size smaller than minlot, we change
return(lot); // lot size returned
}
string getsignal() // we calculate trading signal here
{
double rsi=iRSI(Symbol(),0,RSIPeriod,0,0); // we use RSI to get signal
if(rsi<LowerLevel) return("buy"); // buy signal returned when
if(rsi>UpperLevel) return("sell"); // sell signal returned when
return("wait and see"); // no signal returned
}
int sendorder(int cmd,double lots,double prc,double sl,double tp,color warna)
{
return(OrderSend(Symbol(),cmd,lots,prc,2,sl,tp,"",MagicNumber,0,warna));
}
void trailingstop() // we check our opened order to see
{ Показано первые 50% кода (символов: 7093)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.