Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Я думал, что исправил это, но нет.
Я пытаюсь сделать комментарий на графике и в журнале, указывающий, какое условие входа было использовано для открытия текущей позиции.
Было ли это сделано раньше и как вы это делаете, потому что я пытаюсь сделать это уже некоторое время, но мне не везет, и это не так просто, как я думал.
Ниже приведена моя последняя попытка.
Любая помощь была бы замечательной
buysig = Long || Long2 || Long3 || Long4;
sellsig = Short || Short2 || Short3 || Short4;
closebuy=sellsig;
closesell=buysig;
if (curprof>=AccountEquity()*ProfitExit/100.0) {
exit=true;
}
if (last>0 && (Time[0]-last)/(Period()*60)>=CancelOrderBars) {
remorder=true;
}
}
void CheckForOpen() {
int res,tr;
//---- условия продажи
co=CalculateCurrentOrders(Symbol());
if(sellsig && lastsig!=-1) {
if ( Short == true)Print(" Взят короткий сигнал ");
if ( Short2 == true)Print(" Взят сигнал Short2 ");
if ( Short3 == true)Print(" Взят сигнал Short3 ");
if ( Short4 == true)Print(" Взят сигнал Short4 ");
co=CalculateCurrentOrders(Symbol());
if (co==0) {
res = OpenStop(OP_SELLSTOP,LotsRisk(StopLoss), Low[shift]-OrderPipsDiff*Point, StopLoss, TakeProfit1);
}
lastsig=-1;
last=Time[0];
return;
}
//---- условия покупки
co=CalculateCurrentOrders(Symbol());
if(buysig && lastsig!=1) {
if ( Long == true) Print(" Взят длинный сигнал ");
if ( Long2 == true) Print(" Взят сигнал Long2 ");
if ( Long3 == true) Print(" Взят сигнал Long3 ");
if ( Long4 == true) Print(" Взят сигнал Long4 ");
co=CalculateCurrentOrders(Symbol());
if (co==0) {
res = OpenStop(OP_BUYSTOP,LotsRisk(StopLoss), High[shift]+OrderPipsDiff*Point, StopLoss, TakeProfit1);
}
last=Time[0];
lastsig=1;
return;
}
}
bool CloseAtMarket(int ticket,double lot) {
//устойчивое к сбоям закрытие рыночного ордера
bool bres=false; int tr;
tries=0;
while (!bres && tries<OrderTriesNumber) {
RefreshRates();
bres=OrderClose(ticket,lot,OrderClosePrice(),slippage,White);
tries++;
tr=0; while (tr<5 && !IsTradeAllowed()) { tr++; Sleep(2000); }
}
if (!bres) Print("Ошибка при закрытии ордера : ",ErrorDescription(GetLastError()));
}
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);
Этот советник даже не компилируется, стоплосс должен быть наименьшей из ваших проблем. Есть 5 переменных, которые имеют случайные пробелы в них или первая буква не заглавная!
Этот советник даже не будет компилироваться, стоплосс должен быть самой маленькой из ваших проблем. Есть 5 переменных, которые имеют случайные пробелы в них или первая буква не заглавная!
Вот исправленная версия.
Но он все равно не может открыть ни одной позиции, потому что в коде нет логики для решения, как открывать длинные/короткие позиции.
Помогите с этим советником
Кто такой этот CHinGsMAroonCLK?
Насколько я помню, этот советник не что иное, как 10p3 от elCactus, но может я ошибаюсь...
Посмотрите его тему, возможно, вы найдете то, что ищете: https://www.mql5.com/en/forum/174975Хорошо... теперь дело в том, что я не могу поставить стоплосс для этого советника... каков код? Можете помочь мне? спасибо.
нет торговой зоны - помощь с кодом
Привет всем,
Я пытаюсь настроить код, но после долгих усилий я все еще не могу получить его правильно... если кто-нибудь из вас не возражает, вы можете взглянуть на это... спасибо...
Идея заключается в том, чтобы остановить следующую сделку, если ценовой диапазон находится в той же зоне, что и предыдущая сделка. Длинная сделка будет проверять зону для последней длинной сделки с открытой позицией, а короткая сделка будет проверять зону для последней короткой сделки с открытой позицией.
Т.е. если первый LONG на 1.4000, то второй LONG сработает только если цена выйдет из зоны (зона 20 пунктов) менее 1.3990 и более 1.4010.
Спасибо всем.
//+------------------------------------------------------------------------------------------------------------------------+
//| Фильтр для бокового рынка - предотвращение множественных сделок в аналогичном ценовом диапазоне и создание зоны, запрещающей торговлю.
//+------------------------------------------------------------------------------------------------------------------------+
extern int Zone1 = -10; // (нижняя зона)
extern int Zone2 = 10; // (верхняя зона)
// зона отсутствия торговли между -10 и +10 от предыдущей сделки
bool CheckZone(int type)
{
int cnt = OrdersTotal();
for (int i=0; i < cnt; i++)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
if (OrderSymbol() != Symbol()) continue;
if (OrderMagicNumber() != Magic) continue;
if (OrderType() != type) continue;
if (type == OP_BUY)
{
if( (Bid - OrderOpenPrice()) > Zone1*Point && (Bid - OrderOpenPrice()) < Zone2*Point ) return(false);
}
if (type == OP_SELL)
{
if( (OrderOpenPrice()-Ask) > Zone1*Point && (OrderOpenPrice()-Ask) < Zone2*Point ) return(false);
}
}
return (true);
}
Решить проблему с советником
Приветствую всех программистов MQL,
Пожалуйста, проверьте следующий код и скажите мне, почему он не размещает сделки на моем демо-счете. Это хороший советник на GJ 1m, но, к сожалению, он не работает. Может ли кто-нибудь исправить его и сделать его пригодным для использования в качестве советника без ошибок.
Заранее благодарен!
С наилучшими пожеланиями.
//+------------------------------------------------------------------+
extern int Length1 = 3;
extern int Length2 = 10;
extern int Length3 = 16;
double Histo[];
double MaHisto[];
double up[];
double dn[];
double upMode[];
double dnMode[];
int alertBar;
int init()
{
return(0);
}
int deinit()
{
return(0);
}
int start()
{
int limit;
int counted_bars=IndicatorCounted();
if(counted_bars<0) counted_bars=0;
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
for(int i = 0 ;i <= limit ;i++)Histo = iMA(Symbol(),0,Length1,0,MODE_EMA,PRICE_CLOSE,i) - iMA(Symbol(),0,Length2,0,MODE_EMA,PRICE_CLOSE,i);
for(int j = 0 ;j <= limit ;j++)MaHisto[j] = iMAOnArray(Histo,0,Length3,0,MODE_EMA,j);
for(int m = 0 ;m <= limit ;m++)
{
if(MaHisto[m+1] 0)
{
up[m] = Open[m]-(5*Point);
if(Bars > alertBar && m == 0)
{
//Alert(Symbol()+""+Period()+" KI LONG ",Ask);
OrderSend(Symbol(),OP_BUY,0.1,Ask,3,25,15,0,0,0,Red);
alertBar = Bars;
}
}
else if(MaHisto[m+1] >= 0 && MaHisto[m]< 0)
{
dn[m] = Open[m]+(5*Point);
if(Bars > alertBar && m == 0)
{
OrderSend(Symbol(),OP_SELL,0.1,Ask,3,25,15,0,0,0,Red);
alertBar = Bars;
}
}
else
{
up[m] = EMPTY_VALUE;
dn[m] = EMPTY_VALUE;
}
if( MaHisto[m] > 0 )
{
upMode[m] = High[m];
dnMode[m] = Low[m];
}
else if( MaHisto[m] < 0 )
{
dnMode[m] = High[m];
upMode[m] = Low[m];
}
}
return(0);
}
//+------------------------------------------------------------------+
Привет всем программистам MQL,
Пожалуйста, проверьте следующий код и скажите мне, почему он не размещает сделки на моем демо-счете. Это хороший советник на GJ 1m, но, к сожалению, он не работает. Может ли кто-нибудь исправить это, пожалуйста, и сделать его пригодным для использования в качестве советника без ошибок.
Заранее благодарен!
С наилучшими пожеланиями.
//+------------------------------------------------------------------+
extern int Length1 = 3;
extern int Length2 = 10;
extern int Length3 = 16;
double Histo[];
double MaHisto[];
double up[];
double dn[];
double upMode[];
double dnMode[];
int alertBar;
int init()
{
return(0);
}
int deinit()
{
return(0);
}
int start()
{
int limit;
int counted_bars=IndicatorCounted();
if(counted_bars<0) counted_bars=0;
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
for(int i = 0 ;i <= limit ;i++)Histo = iMA(Symbol(),0,Length1,0,MODE_EMA,PRICE_CLOSE,i) - iMA(Symbol(),0,Length2,0,MODE_EMA,PRICE_CLOSE,i);
for(int j = 0 ;j <= limit ;j++)MaHisto[j] = iMAOnArray(Histo,0,Length3,0,MODE_EMA,j);
for(int m = 0 ;m <= limit ;m++)
{
if(MaHisto[m+1] 0)
{
up[m] = Open[m]-(5*Point);
if(Bars > alertBar && m == 0)
{
//Alert(Symbol()+""+Period()+" KI LONG ",Ask);
OrderSend(Symbol(),OP_BUY,0.1,Ask,3,25,15,0,0,0,Red);
alertBar = Bars;
}
}
else if(MaHisto[m+1] >= 0 && MaHisto[m]< 0)
{
dn[m] = Open[m]+(5*Point);
if(Bars > alertBar && m == 0)
{
OrderSend(Symbol(),OP_SELL,0.1,Ask,3,25,15,0,0,0,Red);
alertBar = Bars;
}
}
else
{
up[m] = EMPTY_VALUE;
dn[m] = EMPTY_VALUE;
}
if( MaHisto[m] > 0 )
{
upMode[m] = High[m];
dnMode[m] = Low[m];
}
else if( MaHisto[m] < 0 )
{
dnMode[m] = High[m];
upMode[m] = Low[m];
}
}
return(0);
}
//+------------------------------------------------------------------+"OrderSend(Symbol(),OP_SELL,0.1,Ask,3,25,15,0,0,0,R ed); "
Вы продаете по цене Ask, а должно быть Bid.
В поле Комментарий должно быть "", а не 0.
25 как SL должно быть Bid+25*Point.
15 как TP должно быть Bid-15*Point.
"R ed" не является цветом.
"OrderSend(Symbol(),OP_SELL,0.1,Ask,3,25,15,0,0,0,R ed); "
Вы продаете по цене Ask, должно быть Bid.
В поле Комментарий должно быть "", а не 0.
25 как SL должно быть Bid+25*Point.
15 как TP должно быть Bid-15*Point.
"R ed" - это не цвет.Большое спасибо за поддержку!
Но, я все еще сталкиваюсь с проблемами нулевые знания MQL. Не могли бы вы скопировать код в файл mq4 и протестировать его на демо, а затем сообщить мне, работает ли он нормально. Ваша поддержка будет засчитана как Добрая Помощь Мишель.
С наилучшими пожеланиями,
Кашиф.
Нет, извините, сейчас у меня нет времени.
Через несколько часов я сяду на корабль, чтобы вернуться к своей семье на Рождество... и больше никакого ПК...