Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Vladimir Karputov, 2017.01.16 21:36
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
bool PlusDeal()
{
bool res=true;
for(int i=PositionsTotal()-1;i>=0;i--)
if(Position.SelectByIndex(i))
if(Position.Symbol()==Symbol() && Position.Magic()==Magic)
{
if(Position.PositionType()==POSITION_TYPE_BUY)
if(Position.StopLoss()<Position.PriceOpen())
return(false);
if(Position.PositionType()==POSITION_TYPE_SELL)
if(Position.StopLoss()>Position.PriceOpen())
return(false);
}
return(res);
}
//| |
//+------------------------------------------------------------------+
bool PlusDeal()
{
bool res=true;
for(int i=PositionsTotal()-1;i>=0;i--)
if(Position.SelectByIndex(i))
if(Position.Symbol()==Symbol() && Position.Magic()==Magic)
{
if(Position.PositionType()==POSITION_TYPE_BUY)
if(Position.StopLoss()<Position.PriceOpen())
return(false);
if(Position.PositionType()==POSITION_TYPE_SELL)
if(Position.StopLoss()>Position.PriceOpen())
return(false);
}
return(res);
}
asd
if(Signal==ORDER_TYPE_BUY)
{
if((total_buy<MaxOrders) && (total_sell==0))
{
if(TimeCurrent()>=clock)
{
if(A && B && C && D)
{
if(PlusDeal())
{
trade.Buy(Volume,_Symbol,0,0,0,CommentOrder);
Sleep(Stop_time*60*1000);
}
}
}
}
}
{
if((total_buy<MaxOrders) && (total_sell==0))
{
if(TimeCurrent()>=clock)
{
if(A && B && C && D)
{
if(PlusDeal())
{
trade.Buy(Volume,_Symbol,0,0,0,CommentOrder);
Sleep(Stop_time*60*1000);
}
}
}
}
}
Вот так попробуйте.
Добавлено: и картинка (распечатать и положить под стекло рабочего стола :) )
Добавлено: а зачем Sleep()? Это не есть хорошо.
Может имеет смысл поиск отдельно смотреть по Buy и по Sell?
bool PlusDeal()
{
for(int i=PositionsTotal()-1;i>=0;i--)
if(Position.SelectByIndex(i))
if(Position.Symbol()==Symbol() && Position.Magic()==Magic)
{
//if(POSITION_TIME!=0)return(true);
if(Position.PositionType()==POSITION_TYPE_BUY)
{
if(Position.StopLoss()>=Position.PriceOpen())return(true); // true не надо возвращать, вдруг другая позиция не в безубытке
else return(false); // возвращать только false, как только наткнулись на позицию не в безубытке
}
if(Position.PositionType()==POSITION_TYPE_SELL)
{
if(Position.StopLoss()<=Position.PriceOpen())return(true);
else return(false);
}
}
return(false); // если попали сюда, значит позиций нет, или они все в безубытке,значит надо вернут true
}
Еще не помешает проверять есть ли вообще стоплосс позиции, если нету, то возвращать false
{
for(int i=PositionsTotal()-1;i>=0;i--)
if(Position.SelectByIndex(i))
if(Position.Symbol()==Symbol() && Position.Magic()==Magic)
{
//if(POSITION_TIME!=0)return(true);
if(Position.PositionType()==POSITION_TYPE_BUY)
{
if(Position.StopLoss()>=Position.PriceOpen())return(true); // true не надо возвращать, вдруг другая позиция не в безубытке
else return(false); // возвращать только false, как только наткнулись на позицию не в безубытке
}
if(Position.PositionType()==POSITION_TYPE_SELL)
{
if(Position.StopLoss()<=Position.PriceOpen())return(true);
else return(false);
}
}
return(false); // если попали сюда, значит позиций нет, или они все в безубытке,значит надо вернут true
}
Dmitry Fedoseev:
спасибо понял
bool PlusDeal()
{
for(int i=PositionsTotal()-1;i>=0;i--)
if(Position.SelectByIndex(i))
if(Position.Symbol()==Symbol() && Position.Magic()==Magic)
{
//if(POSITION_TIME!=0)return(true);
if(Position.PositionType()==POSITION_TYPE_BUY)
{
if(Position.StopLoss()>=Position.PriceOpen())return(true); // true не надо возвращать, вдруг другая позиция не в безубытке
else return(false); // возвращать только false, как только наткнулись на позицию не в безубытке
}
if(Position.PositionType()==POSITION_TYPE_SELL)
{
if(Position.StopLoss()<=Position.PriceOpen())return(true);
else return(false);
}
}
return(false); // если попали сюда, значит позиций нет, или они все в безубытке,значит надо вернут true
}
Еще не помешает проверять есть ли вообще стоплосс позиции, если нету, то возвращать false{
for(int i=PositionsTotal()-1;i>=0;i--)
if(Position.SelectByIndex(i))
if(Position.Symbol()==Symbol() && Position.Magic()==Magic)
{
//if(POSITION_TIME!=0)return(true);
if(Position.PositionType()==POSITION_TYPE_BUY)
{
if(Position.StopLoss()>=Position.PriceOpen())return(true); // true не надо возвращать, вдруг другая позиция не в безубытке
else return(false); // возвращать только false, как только наткнулись на позицию не в безубытке
}
if(Position.PositionType()==POSITION_TYPE_SELL)
{
if(Position.StopLoss()<=Position.PriceOpen())return(true);
else return(false);
}
}
return(false); // если попали сюда, значит позиций нет, или они все в безубытке,значит надо вернут true
}
Vladimir Karputov:
Может имеет смысл поиск отдельно смотреть по Buy и по Sell?
все работает спасибо!
Может имеет смысл поиск отдельно смотреть по Buy и по Sell?
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Всем привет
Хотел написать функцию чтобы делала так:
Проверяет все открытые позиции и открывает последующие по сигналу только если все предыдущие находятся в безубытке.
Написал с помощью....вот это:
{
for(int i=PositionsTotal()-1;i>=0;i--)
if(Position.SelectByIndex(i))
if(Position.Symbol()==Symbol() && Position.Magic()==Magic)
{
//if(POSITION_TIME!=0)return(true);
if(Position.PositionType()==POSITION_TYPE_BUY)
{
if(Position.StopLoss()>=Position.PriceOpen())return(true);
else return(false);
}
if(Position.PositionType()==POSITION_TYPE_SELL)
{
if(Position.StopLoss()<=Position.PriceOpen())return(true);
else return(false);
}
}
return(false);
}
а затем добавил в условия для открытия вот так:
{
if((total_buy<MaxOrders) && (total_sell==0))
{
if(TimeCurrent()>=clock)
{
if(A && B && C && D)
{
if(PlusDeal()==true)
{
trade.Buy(Volume,_Symbol,0,0,0,CommentOrder);
Sleep(Stop_time*60*1000);
}
}
}
}
}
не работает, может вечер и мозг не варит.
Что не так подскажите...