champion.mq5
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «champion.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Champion — торговый советник для MetaTrader 5, работающий на основе индикатора RSI. Советник анализирует текущее состояние рынка и выставляет отложенные ордера при достижении RSI заданных уровней. При наличии открытых позиций автоматически корректирует стоп-лосс и тейк-профит для защиты прибыли и ограничения убытков. Также советник отслеживает и при необходимости модифицирует активные отложенные ордера, поддерживая их на адекватном расстоянии от текущей цены. Все операции выполняются через стандартные торговые API MetaTrader 5 с предварительной проверкой корректности запросов.
Настройки программы
| Настройка | Описание |
|---|---|
| Take Profit (TP) | Тейк-профит — Уровень фиксации прибыли в пунктах для выставляемых и модифицируемых ордеров |
| Stop Loss (SL) | Стоп-лосс — Уровень ограничения убытков в пунктах для выставляемых и модифицируемых ордеров |
| ?????? RSI (RSIPeriod) | Период RSI — Период расчёта индикатора RSI, используемого для определения условий входа |
| ??????? RSI (RSILevel) | Уровень RSI — Пороговое значение RSI, при достижении которого советник формирует сигналы для выставления отложенных ордеров |
Поиск по коду файла
#property version "1.07"
input int TP = 150; // Take Profit
input int SL = 50; // Stop Loss
input int RSIPeriod = 14; // ?????? RSI
input int RSILevel = 30; // ??????? RSI
MqlTradeRequest request;
MqlTradeResult result;
MqlTradeCheckResult check;
int rsiHandle;
double rsiVal[3];
double Ask,Bid,sl;
int i,Spread;
double Lots;
ulong StopLevel;
double volume()
{
Lots=AccountInfoDouble(ACCOUNT_FREEMARGIN)/2000;
Lots=MathMin(15,MathMax(0.1,Lots));
Lots=NormalizeDouble(Lots,2);
return(Lots);
}
int OnInit()
{
// код доступен только после оплаты
}
void OnDeinit(const int reason)
{
}
void OnTick()
{
// код доступен только после оплаты
}
CopyBuffer(rsiHandle,0,0,3,rsiVal);
ArraySetAsSeries(rsiVal,true);
Ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
Bid = SymbolInfoDouble(_Symbol, SYMBOL_BID);
Spread=int(SymbolInfoInteger(_Symbol,SYMBOL_SPREAD));
StopLevel=SymbolInfoInteger(Symbol(),SYMBOL_TRADE_STOPS_LEVEL);
Comment(StringFormat("\n\n\nAsk = %G\nBid = %G\nSpread = %G\nStopLevel = %G",Ask,Bid,Spread,StopLevel));
if(PositionsTotal()<1 && OrdersTotal()<1)
{
if(rsiVal[1]<RSILevel)
{
request.action = TRADE_ACTION_PENDING;
request.symbol = _Symbol;
request.volume = NormalizeDouble(volume()/3,2);
request.price=NormalizeDouble(Ask+StopLevel*_Point,_Digits);
request.sl = NormalizeDouble(request.price - SL*_Point,_Digits);
request.tp = NormalizeDouble(request.price + TP*_Point,_Digits);
request.deviation=0;
request.type=ORDER_TYPE_BUY_STOP;
request.type_filling=ORDER_FILLING_FOK;
for(i=0;i<3;i++)
{
if(OrderCheck(request,check))
{
OrderSend(request,result);
Print("?????????? ????? BuyStop");
}
Print(ResultRetcodeDescription(result.retcode));
}
}
if(rsiVal[1]>100-RSILevel)
{
request.action = TRADE_ACTION_PENDING;
request.symbol = _Symbol;
request.volume = NormalizeDouble(volume()/3,2);
request.price=NormalizeDouble(Bid-StopLevel*_Point,_Digits);
request.sl = NormalizeDouble(request.price + SL*_Point,_Digits);
request.tp = NormalizeDouble(request.price - TP*_Point,_Digits);
request.deviation=0;
request.type=ORDER_TYPE_SELL_STOP;
request.type_filling=ORDER_FILLING_FOK;
for(i=0;i<3;i++)
{
if(OrderCheck(request,check))
{
OrderSend(request,result);
Print("?????????? ????? SellStop");
}
Print(ResultRetcodeDescription(result.retcode));
}
}
}
for(i=0;i<PositionsTotal();i++)
{
if(Symbol()==PositionGetSymbol(i))
{
if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
{
sl=MathMax(PositionGetDouble(POSITION_PRICE_OPEN)+Spread*_Point,Bid-SL*_Point);
if(sl>PositionGetDouble(POSITION_SL) && (Bid-StopLevel*_Point-Spread*_Point)>PositionGetDouble(POSITION_PRICE_OPEN))
{
request.action = TRADE_ACTION_SLTP;
request.symbol = _Symbol;
request.sl = NormalizeDouble(sl,_Digits);
request.tp = PositionGetDouble(POSITION_TP);
if(OrderCheck(request,check))
{
OrderSend(request,result);
Print("??????? ???? ????? ??????? Buy #",request.order);
}
else
{
Print(ResultRetcodeDescription(result.retcode));
return;
}
return;
}
}
if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
{
sl=MathMin(PositionGetDouble(POSITION_PRICE_OPEN)-Spread*_Point,Ask+SL*_Point);
if(sl<PositionGetDouble(POSITION_SL) && (PositionGetDouble(POSITION_PRICE_OPEN)-StopLevel*_Point-Spread*_Point)>Ask)
{
request.action = TRADE_ACTION_SLTP;
request.symbol = _Symbol;
request.sl = NormalizeDouble(sl,_Digits);
request.tp = PositionGetDouble(POSITION_TP);
if(OrderCheck(request,check))
{
OrderSend(request,result);
Print("??????? ???? ????? ??????? Sell #",request.order);
}
else
{
Print(ResultRetcodeDescription(result.retcode));
return;
}
return;
}
}
}
}
for(int pos=0; pos<OrdersTotal(); pos++)
{
ulong order_ticket=OrderGetTicket(pos);
if(OrderGetString(ORDER_SПоказано первые 50% кода (символов: 6571)
Что вы получите после оплаты
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? Адрес передаётся вместе с заказом в магазин и сохраняется для связи заказа с оплатой. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.
Стоимость полного кода: 657 ₽ (≈ $7.76 USDT)