grid trial ea.mq4
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «grid trial ea.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Данный продукт представляет собой торгового советника для платформы MetaTrader 4, реализующего стратегию сеточной торговли. Советник размещает отложенные ордера BUY STOP и SELL STOP на заданных уровнях сетки вокруг начальной цены, формируя сетку из позиций вверх и вниз от точки входа.
Советник поддерживает настраиваемое количество уровней сетки и расстояние между ними. При достижении ценой определённых условий запускается логика ре-энтри — повторное открытие отложенных ордеров с увеличенным объёмом. Также реализована функция частичного закрытия позиций при достижении промежуточных целевых уровней прибыли.
Встроена система управления денежными средствами, позволяющая автоматически рассчитывать размер лота на основе баланса счёта, плеча и заданного коэффициента риска. Советник отслеживает историю ордеров для определения завершения торговой сессии и может продолжать работу или останавливаться в зависимости от соответствующей настройки.
Настройки программы
| Настройка | Описание |
|---|---|
| INCREMENT | Расстояние между уровнями сетки, измеряемое в пунктах. Определяет шаг размещения отложенных ордеров BUY STOP и SELL STOP от начальной цены. |
| LOTS | Размер лота для открытия каждого отложенного ордера. Используется как базовый объём позиции при отсутствии включённого управления денежными средствами. |
| LEVELS | Количество уровней сетки. Задаёт число отложенных ордеров, размещаемых в каждом направлении от начальной цены. |
| MAX_LOTS | Максимальный допустимый размер лота при частичном закрытии позиции. Ограничивает объём закрываемой части ордера при достижении целевых уровней прибыли. |
| MAGIC | Магический номер, используемый для идентификации ордеров, открытых данным советником, среди всех ордеров на счёте. |
| CONTINUE | Переключатель продолжения работы советника после завершения торговой сессии. При значении true советник продолжает торговлю после обнаружения завершённых ордеров в истории, при false — останавливается. |
| MONEY_MANAGEMENT | Переключатель системы автоматического управления денежными средствами. При включении размер лота рассчитывается на основе баланса счёта, плеча и коэффициента риска. |
| RISK_RATIO | Коэффициент риска, используемый при расчёте размера лота в режиме управления денежными средствами. Определяет долю баланса, подвергаемую риску. |
Поиск по коду файла
extern int INCREMENT=35;
extern double LOTS=0.01;
extern int LEVELS=1;
extern double MAX_LOTS=99;
extern int MAGIC=1803;
extern bool CONTINUE=true;
extern bool MONEY_MANAGEMENT=false;
extern int RISK_RATIO=2;
bool UseProfitTarget=false;
bool UsePartialProfitTarget=false;
int Target_Increment = 50;
int First_Target = 20;
bool UseEntryTime=false;
int EntryTime=0;
bool Enter=true;
int nextTP;
int init() {
// код доступен только после оплаты
}
int deinit() {
return(0);
}
int start() {
// код доступен только после оплаты
}
int ticket, cpt, profit, total=0, BuyGoalProfit, SellGoalProfit, PipsLot=0;
double ProfitTarget=INCREMENT*2; //Consider making this a parameter
double BuyGoal=0, SellGoal=0;
double spread=(Ask-Bid)/Point;
double InitialPrice=0;
if(INCREMENT<MarketInfo(Symbol(),MODE_STOPLEVEL)+spread)
INCREMENT=1+MarketInfo(Symbol(),MODE_STOPLEVEL)+spread;
if(MONEY_MANAGEMENT)
LOTS=NormalizeDouble(AccountBalance()*AccountLeverage()/1000000*RISK_RATIO,0)*MarketInfo(Symbol(),MODE_MINLOT);
if(LOTS<MarketInfo(Symbol(),MODE_MINLOT)) {
Comment("Not Enough Free Margin to begin");
return(0);
}
for(cpt=1;cpt<LEVELS;cpt++) PipsLot+=cpt*INCREMENT;
for(cpt=0;cpt<OrdersTotal();cpt++) {
OrderSelect(cpt,SELECT_BY_POS,MODE_TRADES);
if(OrderMagicNumber()==MAGIC && OrderSymbol()==Symbol()) {
total++;
if(!InitialPrice) InitialPrice=StrToDouble(OrderComment());
if(UsePartialProfitTarget && UseProfitTarget && OrderType()<2) {
double val=getPipValue(OrderOpenPrice(),OrderType());
takeProfit(val,OrderTicket());
}
}
}
if(total<1 && Enter && (!UseEntryTime || (UseEntryTime && Hour()==EntryTime))) {
if(AccountFreeMargin()<(100*LOTS)) { //Consider making 100 a parameter
Print("Not enough free margin to begin");
return(0);
}
InitialPrice=Ask;
SellGoal=InitialPrice-(LEVELS+1)*INCREMENT*Point;
BuyGoal=InitialPrice+(LEVELS+1)*INCREMENT*Point;
for(cpt=1;cpt<=LEVELS;cpt++) {
double buyEntry = InitialPrice + cpt * INCREMENT * Point;
double sellEntry = InitialPrice - cpt * INCREMENT * Point;
double buySL, buyTP, sellSL, sellTP;
GetSLTP(buyEntry, OP_BUYSTOP, INCREMENT, buySL, buyTP);
GetSLTP(sellEntry, OP_SELLSTOP, INCREMENT, sellSL, sellTP);
OrderSend(Symbol(), OP_BUYSTOP, LOTS, buyEntry, 2, buySL, buyTP, DoubleToStr(InitialPrice,Digits), MAGIC, 0);
OrderSend(Symbol(), OP_SELLSTOP, LOTS, sellEntry, 2, sellSL, sellTP, DoubleToStr(InitialPrice,Digits), MAGIC, 0);
}
}
else {
BuyGoal=InitialPrice+INCREMENT*(LEVELS+1)*Point;
SellGoal=InitialPrice-INCREMENT*(LEVELS+1)*Point;
int totalHistory = OrdersHistoryTotal();
for(cpt=0;cpt<totalHistory;cpt++) {
OrderSelect(cpt,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC && StrToDouble(OrderComment())==InitialPrice) {
EndSession();
return(0);
}
}
if(UseProfitTarget && CheckProfits(LOTS,OP_SELL,true,InitialPrice)>ProfitTarget) {
deleteAllPendingOrders();
return(0);
}
BuyGoalProfit=CheckProfits(LOTS,OP_BUY,false,InitialPrice);
SellGoalProfit=CheckProfits(LOTS,OP_SELL,false,InitialPrice);
for(cpt=LEVELS;cpt>=1 && BuyGoalProfit<ProfitTarget;cpt--) {
double buyEntry2 = InitialPrice + cpt * INCREMENT * Point;
if(Ask <= (buyEntry2 - MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)) {
double sl2, tp2;
GetSLTP(buyEntry2, OP_BUYSTOP, INCREMENT, sl2, tp2);
ticket = OrderSend(Symbol(), OP_BUYSTOP, cpt*LOTS, buyEntry2, 2, sl2, tp2, DoubleToStr(InitialPrice,Digits), MAGIC, 0);
if(ticket>0)
BuyGoalProfit += LOTS * (tp2 - buyEntry2) / Point;
}
}
for(cpt=LEVELS;cpt>=1 && SellGoalProfit<ProfitTarget;cpt--) {
double sellEntry2 = InitialPrice - cpt * INCREMENT * Point;
if(Bid >= (sellEntry2 + MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)) {
GetSLTP(sellEntry2, OP_SELLSTOP, INCПоказано первые 50% кода (символов: 6400)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.