Aouto Adjusting
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «aouto adjusting ea.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Aouto Adjusting — торговый советник для MetaTrader 4, анализирующий ценовые данные с помощью индикаторов Momentum (период 14) и EMA (периоды 6, 14, 26). Советник определяет точки входа на каждом новом свече, проверяя соотношение скользящих средних и уровни моментума.
При выполнении условий для покупки (MA6 < MA14 < MA26, цена касается или пробивает MA14, моментум выше порога Mom_Buy) открывается длинная позиция. При выполнении условий для продажи (MA6 > MA14 > MA26, цена касается или пробивает MA14, моментум выше порога Mom_Sell) открывается короткая позиция. Размер лота рассчитывается на основе процента риска от собственного капитала.
Советник также реализует trailing stop — отслеживает открытые позиции и модифицирует стоп-лоссы и тейк-профиты по мере движения цены. Перед модификацией выполняется проверка допустимости уровней с учётом стоп-уровня брокера. Открытие позиций и модификация ордеров осуществляются через стандартные торговые функции MetaTrader 4.
Настройки программы
| Настройка | Описание |
|---|---|
| PADAMOUNT | Пипсы за пределом свечи для стоп-цены — Количество пипсов за пределами свечи для установки стоп-цены входа. |
| RISKPRESENT | Процент риска от капитала — Процент собственного капитала, рискуемый при открытии одной позиции. |
| REWARD_RATIO | Соотношение тейк-профита к стоп-лоссу — Соотношение тейк-профита к стоп-лоссу при открытии позиции. |
| CANDELSBACK | Количество свечей для мин/макс — Количество свечей для определения минимума и максимума при расчёте стоп-цен входа в позицию. |
| Mom_Sell | Порог моментума для продажи — Пороговое значение моментума для открытия продавательских позиций. |
| Mom_Buy | Порог моментума для покупки — Пороговое значение моментума для открытия покупательских позиций. |
| MAGICNUMBER | Магический номер — Магический номер, идентифицирующий ордера, открытые данным советником. |
Поиск по коду файла
#property version "1.00"
#property strict
extern int PADAMOUNT=3;//pips Beyond candle to stop
extern double RISKPRESENT=0.1;//Risk Present
extern double REWARD_RATIO=2;//Rward_Ratio
extern int CANDELSBACK=3;//How much candles for min\max
extern double Mom_Sell=0.3; //Momentum_Sell
extern double Mom_Buy=0.3; //Momentum_Buy
extern int MAGICNUMBER=1234;
double pips;
double bsl;
double ssl;
double btp;
double stp;
int buyticket;
int selticket;
int BUYSTOPCANDLE;
int SELSTOPCANDLE;
int orderentry;
double Riskedamount;
double Rewadamount;
double LOTSIZE;
int OnInit()
{
// код доступен только после оплаты
}
void OnDeinit(const int reason)
{
}
void OnTick()
{
// код доступен только после оплаты
}
int openorderthispair(string pair)//
{
int total=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))Print("eror");
if(OrderSymbol()==pair) total++;//
}
return(total);
}
bool isnewcandle()
{
static int barsonchart=0;
if(Bars==barsonchart)
return(false);
barsonchart=Bars;
return(true);
}
void checkformatrade()
{
if(isnewcandle())
{
double MomLevel=MathAbs(100-iMomentum(NULL,0,14,PRICE_CLOSE,1));
double MomLevel1=MathAbs(100 - iMomentum(NULL,0,14,PRICE_CLOSE,2));
double MomLevel2=MathAbs(100 - iMomentum(NULL,0,14,PRICE_CLOSE,3));
double MA6=iMA(Symbol(),0,6,0,MODE_EMA,PRICE_MEDIAN,2);
double MA14= iMA(Symbol(),0,14,0,MODE_EMA,PRICE_MEDIAN,1);
double MA26= iMA(Symbol(),0,26,0,MODE_EMA,PRICE_MEDIAN,2);
if(MA6<MA14 && MA14<MA26)
if(Low[1]<=MA14)
if(MomLevel>Mom_Buy || MomLevel1>Mom_Buy || MomLevel2>Mom_Buy)
trade(0);
if(MA6>MA14 && MA14>MA26)
if(High[1]>=MA14)
if(MomLevel>Mom_Sell || MomLevel1>Mom_Sell || MomLevel2>Mom_Sell)
trade(1);
}
}
void trade(int type)
{
int total=OrdersTotal();
LOTSIZE=0;
double Equity=AccountEquity();
Riskedamount=Equity*RISKPRESENT*0.01;
BUYSTOPCANDLE=iLowest(NULL,0,1,CANDELSBACK,1);
SELSTOPCANDLE=iHighest(NULL,0,2,CANDELSBACK,1);
double BUY_STOP_PRICE=Low[BUYSTOPCANDLE]-PADAMOUNT*pips;
double PIPS_TO_BSL=Ask-BUY_STOP_PRICE;
double BUY_TAKEPROFIT_PRICE=Ask+PIPS_TO_BSL*REWARD_RATIO;
double SELL_STOP_PRICE=High[SELSTOPCANDLE]+PADAMOUNT*pips;
double PIPS_TO_SSL=SELL_STOP_PRICE-Bid;
double SELL_TAKEPROFIT_PRICE=Bid-PIPS_TO_SSL*REWARD_RATIO;
if(type==0)
{
if(AccountFreeMargin()<(1000*LOTSIZE))
{
Print("We have no money. Free Margin = ",AccountFreeMargin());
return;
}
LOTSIZE=(Riskedamount/(PIPS_TO_BSL/pips))/10;
if( CheckMoneyForTrade(Symbol(), LotsOptimized(LOTSIZE),OP_BUY))
if(openorderthispair(Symbol())==0)buyticket=OrderSend(Symbol(),OP_BUY,LotsOptimized(LOTSIZE),ND(Ask),3,0,0,NULL,MAGICNUMBER,0,Green);
}
if(type==1)
{
if(AccountFreeMargin()<(1000*LOTSIZE))
{
Print("We have no money. Free Margin = ",AccountFreeMargin());
return;
}
LOTSIZE=(Riskedamount/(PIPS_TO_SSL/pips))/10;
if( CheckMoneyForTrade(Symbol(), LotsOptimized(LOTSIZE),OP_SELL))
if(openorderthispair(Symbol())==0) selticket=OrderSend(Symbol(),OP_SELL,LotsOptimized(LOTSIZE),ND(Bid),3,0,0,NULL,MAGICNUMBER,0,Red);
}
for(int cnt=0;cnt<total;cnt++)
{
if(!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
continue;
if(OrderType()<=OP_SELL && // check for opened position
OrderSymbol()==Symbol()) // check for symbol
{
if(OrderType()==OP_BUY)
{
bsl=BUY_STOP_PRICE;
btp=BUY_TAKEPROFIT_PRICE;
LOTSIZE=(Riskedamount/(PIPS_TO_BSL/pips))/10;
RefreshRates();
double StopLevel=MarketInfo(Symbol(),MODE_STOPLEVEL)+MarketInfo(Symbol(),MODE_SPREAD);
if(bsl<StopLevel*pips) bsl=StopLevel*pips;
if(btp<StopLevel*pips) btp=StopLevel*pips;
string symbol=OrderSymbol();
double point=SymbolInfoDouble(symbol,SYMBOL_POINT);
if(MathAbs(OrderStopLoss()-bsl)>point)
if((pips*PIPS_TO_BSL)>(int)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_FREEZE_LEVEL)*pips)
if(CheckStopLoss_Takeprofit(OP_BUY,bsl,btp))
if(OrderModifyCheck(OrderTicket(),OrderOpenPrice(),bsl,btp))
if(buyticket>0)if(!OrderModify(OrderTicket(),OrderOpenPrice(),NDTP(bsl),NDTP(btp),0,CLR_NONE))Print("eror");
return;
}
else // go to short position
{
ssl=SELL_STOP_PRICE;
stp=SELL_TAKEPROFIT_PRICE;
LOTSIZE=(Riskedamount/(PIPS_TO_SSL/pips))/10;
RefreshRates();
double StopLevel=MarПоказано первые 50% кода (символов: 7948)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.