newm2h.mq4
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «newm2h.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Торговый советник для платформы MetaTrader 4, реализующий сеточную стратегию с управлением позициями. При инициализации открываются параллельно ордера на покупку и продажу с заданными параметрами. Советник отслеживает движение цены относительно рассчитанных уровней и при их достижении закрывает встречные позиции, открывая новые с увеличенным объёмом. Имеет механизм фиксации позиций, активируемый после определённого количества шагов.
Настройки программы
| Настройка | Описание |
|---|---|
| ????????? ?????? ????. (Lot) | Лот — Базовый размер лота для открытия новых позиций. |
| ????????? ?????? ?????. (Grid) | Сетка — Расстояние в пунктах между уровнями открытия ордеров. |
| LockStep | Шаг блокировки — Параметр, определяющий момент активации механизма фиксации позиций. |
Поиск по коду файла
#include <stdlib.mqh>
extern double Lot = 0.1; // ????????? ?????? ????.
extern int Grid = 30; // ????????? ?????? ?????.
extern int LockStep = 5;
int Step, State;
double Spread;
int magic = 9034309;
int i,j;
double CurrentPrice, TargetUp, TargetDown;
double LotSeq[8]={1,1,2,4,8,16,32,64,128};
int LastLock=0;
int Init()
{
Step=0;
Spread=MarketInfo(Symbol(),MODE_SPREAD);
RefreshRates();
CurrentPrice=Bid;
OpenOrder(OP_BUY,Ask,Lot,Ask-400*Point,Bid+Grid*Point);
OpenOrder(OP_SELL,Bid,Lot,Bid+400*Point,Ask-Grid*Point);
CalcTarget();
return(0);
}
int OpenOrder(int Cmd, double Price, double Lots, double SL, double TP)
{
int err;
int ticket=-1;
while (ticket < 0)
{
RefreshRates();
ticket=OrderSend(Symbol(), Cmd, Lots, Price, 3, SL, TP, "", magic, 0, CLR_NONE);
err=GetLastError();
if ((err == 130) || (err == 4107)) {return(0);}
if (ticket == -1)
{
Comment("Error=", err, " ", ErrorDescription(err));
Sleep(6000);
}
else {Comment(" ");}
}
Sleep(1000);
return(ticket);
}
int CalcTarget()
{
TargetUp=CurrentPrice+Grid*Point+Spread;
TargetDown=CurrentPrice-Grid*Point;
return(0);
}
int DoDown()
{
j=OrdersTotal();
for (i=0;i<j;i++)
{
RefreshRates();
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if ((OrderType()==OP_SELL)&&(OrderTicket()>LastLock)) {OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE);}
}
if (State==1)
{
Step=1;
RefreshRates();
CurrentPrice=Bid;
CalcTarget();
OpenOrder(OP_BUY,Ask,LotSeq[1],Bid-400*Point,Bid+Grid*Point);
OpenOrder(OP_SELL,Bid,LotSeq[1],Ask+400*Point,Ask-Grid*Point);
}
if (State==-1)
{
if (Step==LockStep)
{
Step=0;
RefreshRates();
CurrentPrice=Bid;
CalcTarget();
LastLock=OpenOrder(OP_SELL,Bid,LotSeq[LockStep+1],Bid+400*Point,Ask-Grid*Point);
OpenOrder(OP_BUY,Ask,LotSeq[0],Bid-400*Point,Bid+Grid*Point);
OpenOrder(OP_SELL,Bid,LotSeq[0],Ask+400*Point,Ask-Grid*Point);
}
if (Step<LockStep)
{
Step++;
RefreshRates();
CurrentPrice=Bid;
CalcTarget();
OpenOrder(OP_BUY,Ask,LotSeq[Step],Bid-400*Point,Bid+Grid*Point);
OpenOrder(OP_SELL,Bid,LotSeq[1],Ask+400*Point,Ask-Grid*Point);
}
}
State=-1;
return(0);
}
int DoUp()
{
j=OrdersTotal();
for (i=0;i<j;i++)
{
RefreshRates();
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if ((OrderType()==OP_BUY)&&(OrderTicket()>LastLock)) {OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE);}
}
if (State==-1)
{
Step=1;
RefreshRates();
CurrentPrice=Bid;
CalcTarget();
OpenOrder(OP_BUY,Ask,LotSeq[1],Bid-400*Point,Bid+Grid*Point);
OpenOrder(OP_SELL,Bid,LotSeq[1],Ask+400*Point,Ask-Grid*Point);
}
if (State==1)
{
if (Step==LockStep)
{
Step=0;
RefreshRates();
CurrentPrice=Bid;
CalcTarget();
LastLock=OpenOrder(OP_BUY,Ask,LotSeq[LockStep+1],Bid-400*Point,Bid-Grid*Point);
OpenOrder(OP_BUY,Ask,LotSeq[0],Bid-400*Point,Bid+Grid*Point);
OpenOrder(OP_SELL,Bid,LotSeq[0],Ask+400*Point,Ask-Grid*Point);
}
if (Step<LockStep)
{
Step++;
RefreshRates();
CurrentPrice=Bid;
CalcTarget();
OpenOrder(OP_BUY,Ask,LotSeq[1],Ask-400*Point,Bid+Grid*Point);
OpenOrder(OP_SELL,Bid,LotSeq[Step],Bid+400*Point,Ask-Grid*Point);
}
}
State=1;
return(0);
}
int start()
{
// код доступен только после оплаты
}
/*
#include <stdlib.mqh>
extern double Lot = 1; // ????????? ?????? ????.
extern int Grid = 30; // ????????? ?????? ?????.
double Spred;
double SellWorkPrice;
double BuyWorkPrice;
double BuyStopPrice;
double BuyStopProfit;
double SellLimitPrice;
double SellLimitProfit;
double BuyLimitPrice;
double BuyLimitProfit;
double SellStopPrice;
double SellStopProfit;
int StateOld, StateCur;
int Magic=120976;
double CurrentPrice, OldPrice;
int Step;
int LastBuy, LastSell, ProfitOrder;
double LotSeq[6] = {2,2,4.5,11.5,28.5,71}; // For 30
int BuyStopCnt, BuyLimitCnt, SellStopCnt, SellLimitCnt;
bool TradeDone;
int Init() {
Step = 1;
StateCur = 0;
StateOld=StateCur;
Spred = MarketInfo(Symbol(),MODE_SPREAD)*Point;
RefreshRates();
CurrentPrice = Bid;
OpenOrder (Symbol(), OP_SELL, Lot, NormalizeDouble(Bid,4), 3, Bid+400*Point, Ask-Grid*Point, "", Magic, 0, Red);
OpenOrder (Symbol(), OP_BUY, Lot, NormalizeDouble(Ask,4), 3, Ask-400*Point, Bid+Grid*Point, "", Magic, 0, Green);
CalcAllPrice (CurrentPrice);
SearchLastSellBuy();
TradeDone=false;
}
int OpenOrder(string Sym, int Cmd, double Vol, double Prc, int Slp, double Stl, double Tpt, string Com, int Mag, datetime Exp, color Clr) {
int err;
int ticket=-1;
while (ticket < 0)
{
RefreshRates();
ticket=OrderSend(Sym, Cmd, Vol, Prc, Slp, Stl, Tpt, Com, Mag, Exp, Clr);
err=GetLastError();
if ((err == 130) || (err == 4107))
{
return(0);
}
if (ticket == -1)
{
Comment("Error=", err, " ", ErrorDescription(err));
Sleep(6000);
}
else
{
Comment(" ");
}
}
Sleep(1000);
return (ticket);
}
double LotSize(int tStep) {
double rez = Lot*LotSeq[tStep];
return(rez);
}
int SetOrders (double L1, double L2, double L3, double L4){
if (L1 != 0) {OpenOrder (Symbol(), OP_BUYSTOP, L1, BuyStopPrice, 3, BuyStopPrice-400*Point, BuyStopProfit, "", Magic, 0, Green);}
if (L3 != 0) {OpenOrder Показано первые 50% кода (символов: 8127)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.