Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
int start(){
if(TimeCurrent()>D'2008.07.01 12:00:00'){Comment("EXPIRED"); return(0);}
...
return(0);
}
Пожалуйста, подскажите, возможно ли ограничение по дате в советнике, то есть могу ли я установить дату истечения в советнике, чтобы по достижении установленной даты он просто прекратил торговлю.
Вероятно, это будет выглядеть примерно так:-
проверить дату, если дата равна или больше чем (заданная дата), ничего не делать.
Это английская версия, мне нужна версия для MQL4...lol
Спасибо, если кто-то может помочь.Пожалуйста, подскажите, возможно ли установить ограничение по дате в советнике, я имею в виду, могу ли я установить дату истечения в советнике, чтобы по достижении установленной даты он просто прекратил торговлю.
Скорее всего, там будет написано что-то вроде этого:-
проверить дату, если дата равна или больше чем (заданная дата) ничего не делать.
Это английская версия, мне нужна версия для MQL4...lol
Спасибо, если кто-то может помочь.Посмотрите на эту тему https://www.mql5.com/en/forum/174194
Спасибо, сэр... Очень признателен.
Недельный High Low.
Может ли кто-нибудь опубликовать недельный индикатор High Low, подобный прилагаемому для дневного?
Или, возможно, изменить прикрепленный индикатор на недельный для меня, пожалуйста.
Заранее спасибо.
Используйте этот индикатор https://www.mql5.com/en/forum/173574/page32 (он бывает дневным, недельным и месячным).
Или этот https://www.mql5.com/en/forum/177792
Или этот https://www.mql5.com/en/forum/178698
Привет всем
Вот ea, которую я использую. Может кто-нибудь подскажет, что нужно изменить, чтобы одновременно срабатывали BUY-STOP и SELL_Stop. Сейчас срабатывает либо buy-stop, либо sell-stop. Я бы хотел, чтобы срабатывали оба. Во-вторых, что нужно сделать, чтобы ограничить количество ордеров на каждую свечу.
Заранее благодарю всех.
вот код:
void start() {
//---- проверка истории и торговли
if(Bars<100 || IsTradeAllowed()==false) return;
co=CalculateCurrentOrders(Symbol());
CheckForSignals();
if (co>0) CheckForClose();
CheckForOpen();
co=CalculateCurrentOrders(Symbol());
if (mkt>0) {
BreakEvenStop(BreakEven,0);
double pcnt =( (AccountEquity()-AccountBalance()) / AccountBalance())*100;
Print("Капитал счета = ",Капитал счета());
Print("Баланс счета = ",AccountBalance());
if(pcnt>EquityGainPercent)
{
int total = OrdersTotal();
for(int i=total-1;i>=0;i--)
{
OrderSelect(i, SELECT_BY_POS);
int type = OrderType();
bool result = false;
switch(type)
{
// Закрытие открытых длинных позиций
case OP_BUY : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red );
break;
// Закрытие открытых коротких позиций
case OP_SELL : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red );
break;
// Закрытие отложенных ордеров
case OP_BUYLIMIT :
case OP_BUYSTOP :
case OP_SELLLIMIT :
case OP_SELLSTOP : result = OrderDelete( OrderTicket() );
}
if(result == false)
{
Alert("Заказ " , OrderTicket() , " не удалось закрыть. Ошибка:" , GetLastError() );
Sleep(3000);
}
}
Print("ВСЕ ОРДЕРЫ ЗАКРЫТЫ-->Заблокирован на прибыли");
}
return(0);
}
}
//+------------------------------------------------------------------+
//| Вычислить открытые позиции |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
{
int ord; mkt=0;
//----
for(int i=0;i<OrdersTotal();i++) {
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) continue;
if(OrderSymbol()==symbol && OrderMagicNumber()==MagicNumber) {
ord++;
if (OrderType()==OP_BUY || OrderType()==OP_SELL) mkt++;
}
}
//---- возврат объема ордеров
return(ord);
}
//+------------------------------------------------------------------+
//| Проверяем наличие открытых ордеров |
//+------------------------------------------------------------------+
void CheckForSignals() {
//проверка длинных, коротких, выходных сигналов
buysig=false;
sellsig=false;
closebuy=false;
closesell=false;
remorder=false;
int isins, isouts, iskeyrev, is2brev;
if (InsideBar) isins=IsInsideBar(shift);
if (OutSideBar) isouts=IsOutSideBar(shift);
if (KeyReversalBar) iskeyrev=IsKeyReversalBar(shift);
if (TwoBarReversal) is2brev=IsTwoBarReversal(shift);
//условие сигнала длинного входа
if (isins>0 || isouts>0 || iskeyrev>0 || is2brev>0) {
buysig=true;
closesell=true;
}
//сигнал короткого входа
if (isins<0 || isouts<0 || iskeyrev<0 || is2brev<0) {
buysig=false;
sellsig=true;
closebuy=true;
}
if (last>0 && (Time[0]-last)/(Period()*60)>=CancelOrderBars) {
remorder=true;
}
}
void CheckForOpen() {
int res,tr;
//---- условия продажи
co=CalculateCurrentOrders(Symbol());
if(sellsig && lastsig!=-1) {
co=CalculateCurrentOrders(Symbol());
if (co==0) {
res = OpenStop(OP_SELLSTOP,LotsRisk(StopLoss), Low[shift]-OrderPipsDiff*Point, StopLoss, TakeProfit1);
}
lastsig=-1;
last=Time[0];
return;
}
//---- условия покупки
if(buysig && lastsig!=1) {
co=CalculateCurrentOrders(Symbol());
if (co==0) {
res = OpenStop(OP_BUYSTOP,LotsRisk(StopLoss), High[shift]+OrderPipsDiff*Point, StopLoss, TakeProfit1);
}
last=Time[0];
lastsig=1;
return;
}
}
void BreakEvenStop(int BES, int BELP) {
//перемещаем стоплосс для фиксации некоторой прибыли
bool bres;
double StopLoss;
if ( BES > 2 ) {
for (int i = 0; i < OrdersTotal(); i++) {
if ( OrderSelect (i, SELECT_BY_POS) == false ) continue;
if ( OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber ) continue;
if ( OrderType() == OP_BUY ) {
if ( Bid < OrderOpenPrice()+BES*Point ) continue;
StopLoss = OrderOpenPrice()+BELP*Point;
if ( StopLoss > OrderStopLoss() ) {
bres=OrderModify (OrderTicket(), OrderOpenPrice(), StopLoss, OrderTakeProfit(), 0, White);
if (!bres) Print("Ошибка модификации ордера BUY : ",ErrorDescription(GetLastError()));
}
}
if ( OrderType() == OP_SELL ) {
if ( Ask > OrderOpenPrice()-BES*Point ) continue;
StopLoss = OrderOpenPrice()-BELP*Point;
if ( StopLoss < OrderStopLoss() ) {
bres=OrderModify (OrderTicket(), OrderOpenPrice(), StopLoss, OrderTakeProfit(), 0, Gold);
if (!bres) Print("Ошибка модификации ордера SELL : ",ErrorDescription(GetLastError()));
}
}
}
}
return;
}
int IsKeyReversalBar(int shift) {
//Ключевой разворотный бар, открытие ключевого бара должно быть как минимум на ?пунктов выше максимума предыдущего бара.
//Закрытие ключевого бара должно совпадать с максимумом и закрытием предыдущего бара. Открытие текущего бара должно быть
//ниже, чем закрытие ключевого бара. Ордер SellStop должен быть размещен на минимуме ключевого бара, если он не будет исполнен в течение
//следующих 4 баров, то отмените ордер. См. рисунок ниже - короткая!
if (Open[shift]=Low[shift+1] && Close[shift]Close[shift]) return(1);
if (Open[shift]>High[shift+1] && Close[shift]=Close[shift+1] && Open[shift-1]<Close[shift]) return(-1);
return(0);
}
int IsTwoBarReversal(int shift) {
//Двухбарный разворот, открытие первого бара должно быть около минимума предыдущего бара, а закрытие должно быть намного ниже и
//иметь тело хорошего размера. Открытие второго бара должно быть очень близко к закрытию первого бара, но оба должны быть значительно ниже
//средней точки каждого бара, а закрытие должно быть очень близко к минимуму 2 предыдущего бара. Ордер BuyStop должен быть размещен на максимуме
//бара 1, если он не исполняется в течение 4 баров, ордер отменяется. См. рисунок ниже
if (MathAbs(Open[shift+1]-Close[shift+1])> MathAbs(Open[shift+1]-Low[shift+2])<=
MathAbs(Close[shift]-Low[shift+2])<=
MathAbs(Open[shift]-Close[shift+1]) &&
Close[shift+1]<(High[shift+1]+Low[shift+1])/2 &&
Open[shift]<(High[shift]+Low[shift])/2)
return(1);
if (MathAbs(Open[shift+1]-Close[shift+1])> MathAbs(Open[shift+1]-High[shift+2])<=
MathAbs(Close[shift]-Low[shift+2])<=
MathAbs(Open[shift]-Close[shift+1]) &&
Close[shift+1]>(High[shift+1]+Low[shift+1])/2 &&
Open[shift]>(High[shift]+Low[shift])/2)
return(-1);
return(0);
}
int OpenStop(int mode,double lot, double prc, int SL, int TP) {
int res,tr,col;
строка mail;
double openprice,sl,tp,stlev;
попытки=0;
stlev=(1+MarketInfo(Symbol(),MODE_STOPLEVEL))*Point;
while (res<=0 && tries<OrderTriesNumber) {
tr=0; while (tr<5 && !IsTradeAllowed()) { tr++; Sleep(2000); }
RefreshRates();
if (mode==OP_SELLSTOP) {
if (prc<=Bid-stlev) openprice=prc;
else openprice=Bid-stlev;
if (SL>0) sl=openprice+SL*Point;
если (TP>0) tp=openprice-TP*Point;col=Red;
} else
if (mode==OP_BUYSTOP) {
если (prc>=Ask+stlev) openprice=prc;
else openprice=Ask+stlev;
if (SL>0) sl=openprice-SL*Point;
если (TP>0) tp=openprice+TP*Point;col=Blue;
} else return;
Print(Ask," ",Bid," ",Symbol()," ",mode," ",lot," ",openprice," ",sl," ",tp," ");
res=OrderSend(Symbol(),mode,lot,openprice,slippage,sl,tp,EAName+"_"+MagicNumber,MagicNumber,0,col);
попытки++;
}
if (res<=0) Print("Ошибка открытия отложенного ордера : ",ErrorDescription(GetLastError()));
return(res);
}
void CheckForClose() {
bool bres; int tr;
for(int i=0;i<OrdersTotal();i++) {
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) continue;
if(OrderMagicNumber()!=MagicNumber || OrderSymbol()!=Symbol()) continue;
//---- проверка типа ордера
if(OrderType()==OP_BUY && closebuy) {
bres=CloseAtMarket(OrderTicket(),OrderLots());
continue;
}
if(OrderType()==OP_SELL && closesell) {
bres=CloseAtMarket(OrderTicket(),OrderLots());
continue;
}
if(OrderType()==OP_BUYSTOP && (closebuy || remorder)) {
bres=DeletePending(OrderTicket());
continue;
}
if(OrderType()==OP_SELLSTOP && (closesell || remorder)) {
bres=DeletePending(OrderTicket());
continue;
}
}
}
bool DeletePending(int ticket) {
bool bres=false; int tr;
tries=0;
while (!bres && tries<OrderTriesNumber) {
bres=OrderDelete(ticket);
tries++;
tr=0; while (tr<5 && !IsTradeAllowed()) { tr++; Sleep(2000); }
}
if (!bres) Print("Ошибка при удалении ордера : ",ErrorDescription(GetLastError()));
return (bres);
}
Кто-нибудь знает код, чтобы заставить советника работать только с определенным номером счета? Спасибо!
Это здесь https://www.mql5.com/en/forum/174194 (пост #7)
Ты слишком много делаешь.
Это здесь https://www.mql5.com/en/forum/174194 (пост #7)
Спасибо newdigital.
У меня код инициализации (в котором есть истечение времени) устроен следующим образом:
int init()
{if (TimeCurrent()>D'2008.06.07 12:00:00'){Comment("please renew your subscription"); return(0);}
return(0);
}
}
if (Account != AccountNumber()){
Комментарий("Торговля на счете : "+AccountNumber()+" ЗАПРЕЩЕНА!");
return(0);
}else {Comment("");}
И теперь я получаю эту ошибку:
'}' - несбалансированные круглые скобки
Что я делаю не так? И еще, подходит ли "int Account = 111111;" к настройкам советника? Спасибо.