Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 60
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
был косячок в блоке закрытия ордеров исправил.
Подскажите, почему ордера не открывает. Выдает ошибку 130
input double Urov_70=70;
input double Urov_30=30;
input double Lot=0.01;
input int TakeProfit=100;
input int StopLoss=100;
input int MagicNumber=523;
input int slippage=30;
double tp=0,sl=0,OrderBuy=0,OrderSell=0;
int tiket;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
tp=NormalizeDouble(TakeProfit*_Point,_Digits);
sl=NormalizeDouble(StopLoss*_Point,_Digits);
return(INIT_SUCCEEDED);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
for(int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
if(OrderSymbol()==_Symbol && OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY){}
if(OrderType()==OP_SELL){}
}
}
double rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,0);
double rsi1=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,1);
//+------------------------------------------------------------------+
if(OrderBuy<1 && rsi>Urov_70 && rsi1<Urov_70)
{
tiket= OrderSend(_Symbol,OP_BUY,Lot,Ask,slippage,sl,tp,NULL,MagicNumber,0,clrBlue);
}
if(OrderSell<1 && rsi<Urov_30 && rsi1>Urov_30)
{
tiket=OrderSend(_Symbol,OP_SELL,Lot,Bid,slippage,sl,tp,NULL,MagicNumber,0,clrRed);
}
}
//+------------------------------------------------------------------+
Я не профи - могу ошибаться!
вот эти строчки
tp=NormalizeDouble(TakeProfit*_Point,_Digits);sl=NormalizeDouble(StopLoss*_Point,_Digits);
будут понятнее, если вот так
tp=NormalizeDouble(Ask + TakeProfit*_Point,_Digits);sl=NormalizeDouble(Bid - StopLoss*_Point,_Digits);
и еще в глобальных переменных tp и sl не нужно обнулять. достаточно объявить.
Подскажите, почему ордера не открывает. Выдает ошибку 130
...
Ошибка 130 - близкие стопы. Проверяйте их на размер минимальной дистанции установки стопов - StopLevel
И, да, выше уже заметили - неправильно их рассчитываете.
Так сделал - ничего не изменилось (
Да, только объявил.
input double Urov_70=70;
input double Urov_30=30;
input double Lot=0.01;
input int TakeProfit=100;
input int StopLoss=100;
input int MagicNumber=523;
input int slippage=30;
double tp=0,sl=0,OrderBuy=0,OrderSell=0;
int tiket;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
tp=NormalizeDouble(Ask+TakeProfit*_Point,_Digits);
sl=NormalizeDouble(Bid-StopLoss*_Point,_Digits);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
for(int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
if(OrderSymbol()==_Symbol && OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY){}
if(OrderType()==OP_SELL){}
}
}
double rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,0);
double rsi1=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,1);
//+------------------------------------------------------------------+
double StopLossLevel;
double TakeProfitLevel;
if(StopLoss>0) StopLossLevel=Bid-StopLoss*Point; else StopLossLevel=0.0;
if(TakeProfit>0) TakeProfitLevel=Ask+TakeProfit*Point; else TakeProfitLevel=0.0;
///---
if(OrderBuy<1 && rsi>Urov_70 && rsi1<Urov_70)
{
tiket=OrderSend(_Symbol,OP_BUY,Lot,Ask,slippage,sl,tp,NULL,MagicNumber,0,clrBlue);
}
if(OrderSell<1 && rsi<Urov_30 && rsi1>Urov_30)
{
tiket=OrderSend(_Symbol,OP_SELL,Lot,Bid,slippage,sl,tp,NULL,MagicNumber,0,clrRed);
}
}
//+------------------------------------------------------------------+
Так сделал - ничего не изменилось (
input double Urov_70=70;
input double Urov_30=30;
input double Lot=0.01;
input int TakeProfit=100;
input int StopLoss=100;
input int MagicNumber=523;
input int slippage=30;
double tp=0,sl=0,OrderBuy=0,OrderSell=0;
int tiket;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
tp=NormalizeDouble(Ask+TakeProfit*_Point,_Digits);
sl=NormalizeDouble(Bid-StopLoss*_Point,_Digits);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
for(int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
if(OrderSymbol()==_Symbol && OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY){}
if(OrderType()==OP_SELL){}
}
}
double rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,0);
double rsi1=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,1);
//+------------------------------------------------------------------+
double StopLossLevel;
double TakeProfitLevel;
if(StopLoss>0) StopLossLevel=Bid-StopLoss*Point; else StopLossLevel=0.0;
if(TakeProfit>0) TakeProfitLevel=Ask+TakeProfit*Point; else TakeProfitLevel=0.0;
///---
if(OrderBuy<1 && rsi>Urov_70 && rsi1<Urov_70)
{
tiket=OrderSend(_Symbol,OP_BUY,Lot,Ask,slippage,sl,tp,NULL,MagicNumber,0,clrBlue);
}
if(OrderSell<1 && rsi<Urov_30 && rsi1>Urov_30)
{
tiket=OrderSend(_Symbol,OP_SELL,Lot,Bid,slippage,sl,tp,NULL,MagicNumber,0,clrRed);
}
}
//+------------------------------------------------------------------+
Перенесите расчет стопов в онтик
sl=NormalizeDouble(Bid-StopLoss*_Point,_Digits);
..
tp=NormalizeDouble(Ask+TakeProfit*_Point,_Digits);
sl=NormalizeDouble(Bid-StopLoss*_Point,_Digits);
Это вариант для OP_BUY
для OP_SELL
tp=NormalizeDouble(Bid-TakeProfit*_Point,_Digits);
sl=NormalizeDouble(Ask+StopLoss*_Point,_Digits);Ошибка 148. На каждом тике открывает.
input double Urov_70=70;
input double Urov_30=30;
input double Lot=0.01;
input int TakeProfit=100;
input int StopLoss=100;
input int MagicNumber=523;
input int slippage=30;
double tp,sl,OrderBuy=0,OrderSell=0;
int tiket;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
for(int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
if(OrderSymbol()==_Symbol && OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY){}
if(OrderType()==OP_SELL){}
}
}
double rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,0);
double rsi1=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,1);
//+------------------------------------------------------------------+
double StopLossLevel;
double TakeProfitLevel;
if(StopLoss>0) StopLossLevel=Bid-StopLoss*Point; else StopLossLevel=0.0;
if(TakeProfit>0) TakeProfitLevel=Ask+TakeProfit*Point; else TakeProfitLevel=0.0;
tp=NormalizeDouble(Ask+TakeProfit*_Point,_Digits);
sl=NormalizeDouble(Bid-StopLoss*_Point,_Digits);
tp=NormalizeDouble(Bid-TakeProfit*_Point,_Digits);
sl=NormalizeDouble(Ask+StopLoss*_Point,_Digits);
///---
if(OrderBuy<1 && rsi>Urov_70 && rsi1<Urov_70)
{
tiket=OrderSend(_Symbol,OP_BUY,Lot,Ask,slippage,sl,tp,NULL,MagicNumber,0,clrBlue);
}
if(OrderSell<1 && rsi<Urov_30 && rsi1>Urov_30)
{
tiket=OrderSend(_Symbol,OP_SELL,Lot,Bid,slippage,sl,tp,NULL,MagicNumber,0,clrRed);
}
}
//+------------------------------------------------------------------+
два разных значения sl tp
Обзовите их по-разному: slSell , slBuy, tpSell, tpBuy
два разных значения sl tp
Обзовите их по-разному: slSell , slBuy, tpSell, tpBuy
Не помогло (
double slSell,slBuy,tpSell,tpBuy;
int tiket;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
for(int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
if(OrderSymbol()==_Symbol && OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY){}
if(OrderType()==OP_SELL){}
}
}
double rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,0);
double rsi1=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,1);
//+------------------------------------------------------------------+
double StopLossLevel;
double TakeProfitLevel;
if(StopLoss>0) StopLossLevel=Bid-StopLoss*Point; else StopLossLevel=0.0;
if(TakeProfit>0) TakeProfitLevel=Ask+TakeProfit*Point; else TakeProfitLevel=0.0;
tpBuy=NormalizeDouble(Ask+TakeProfit*_Point,_Digits);
slBuy=NormalizeDouble(Bid-StopLoss*_Point,_Digits);
tpSell=NormalizeDouble(Bid-TakeProfit*_Point,_Digits);
slSell=NormalizeDouble(Ask+StopLoss*_Point,_Digits);
///---
if(OrderBuy<1 && rsi>Urov_70 && rsi1<Urov_70)
{
tiket=OrderSend(_Symbol,OP_BUY,Lot,Ask,slippage,sl,tp,NULL,MagicNumber,0,clrBlue);
}
if(OrderSell<1 && rsi<Urov_30 && rsi1>Urov_30)
{
tiket=OrderSend(_Symbol,OP_SELL,Lot,Bid,slippage,sl,tp,NULL,MagicNumber,0,clrRed);
}
}
//+------------------------------------------------------------------+