for(cnt=0;cnt<total;cnt++) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(OrderType()<=OP_SELL && // check for opened position OrderSymbol()==lSymbol()) // check for symbol {
Помогите с кодом плз! почему у меня вылетает в этом коде 138 ошибка??? да и при чем она вообще тут? сделки открываются, но при закрытии цены почему то не те, что такое? все просто. советкик через s свечей должен закрыть сделку а открывать при пробитии фрактала. заранее спасибо за совет
extern int s=5;
extern int stime=60; extern int lots=1; extern int slippage=5; extern double sl=NULL; extern double tp=NULL; double upfr,dnfr=0.0;//уровни последних фракталов double tClose=NULL; double tOpen=NULL; int flag=0; int init() { //----
//---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function |
//+------------------------------------------------------------------+ int deinit() { //----
//---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+
int start()//открытие по пробитию и закрытие через s свечей { //---- upfr=iFractals(Symbol(),PERIOD_H1,MODE_UPPER,4); dnfr=iFractals(Symbol(),PERIOD_H1,MODE_LOWER,4); //ОТКРЫТИЕ ОРДЕРОВ ПО ПРОБИТИЮ if(upfr>0 && High[1]>upfr && flag==0) //если фрактал вверх и уровень фрактала вверх превышен { tOpen=Time[0]; tClose=tOpen+s*stime*60; OrderSend(Symbol(),OP_BUY,lots,Bid,slippage,sl,tp); flag=1; } if(dnfr>0 && Low[1]<dnfr && flag==0)//если фрактал вниз и уровень фрактала принижен { tOpen=Time[0]; tClose=tOpen+s*stime*60; OrderSend(Symbol(),OP_SELL,lots,Ask,slippage,sl,tp); flag=1; }
//ЗАКРЫТИЕ ОРДЕРОВ ПО ПРОШЕСТВИИ ПРОМЕЖУТКА ВРЕМЕНИ if(Time[0]>=tClose )// если время перед закрытием прошло { Print("ФУНКЦИЯ ЗАКРЫТИЯ"); OrClose(); flag=0; }
Помогите с кодом плз! почему у меня вылетает в этом коде 138 ошибка??? да и при чем она вообще тут? сделки открываются, но при закрытии цены почему то не те, что такое?
Тогда проверьте предварительно проверьте размер стоплевела, если он больше чем ваши стоп и профит - подкорректируйте их. если он равен нулю. тогда вам нужно сначала установить ордер с нулевыми стопом и профитом, а потом модифицировать их до нужных уровней.
добрый вечер. Вопрос такой, при закрытии части сделки советник как бы открывает новую сделку с новым тикетом. А магик у нового ордера остается прежним?
Установил MetaTrader 4, открыл демо-счёт. Попробовал открыть-закрывать ордера. Как теперь сделать так, чтобы терминал сам запускал ордер на продажу при повышении цены и на покупку при понижении, используя для этого инфу наподобие "необходима разница в 2 свечки для закрытия старого ордера и открытия нового"?
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && // check for opened position
OrderSymbol()==lSymbol()) // check for symbol
{
?
Помогите с кодом плз! почему у меня вылетает в этом коде 138 ошибка??? да и при чем она вообще тут? сделки открываются, но при закрытии цены почему то не те, что такое? все просто. советкик через s свечей должен закрыть сделку а открывать при пробитии фрактала. заранее спасибо за совет
extern int s=5;
extern int stime=60;extern int lots=1;
extern int slippage=5;
extern double sl=NULL;
extern double tp=NULL;
double upfr,dnfr=0.0;//уровни последних фракталов
double tClose=NULL;
double tOpen=NULL;
int flag=0;
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()//открытие по пробитию и закрытие через s свечей
{
//----
upfr=iFractals(Symbol(),PERIOD_H1,MODE_UPPER,4);
dnfr=iFractals(Symbol(),PERIOD_H1,MODE_LOWER,4);
//ОТКРЫТИЕ ОРДЕРОВ ПО ПРОБИТИЮ
if(upfr>0 && High[1]>upfr && flag==0) //если фрактал вверх и уровень фрактала вверх превышен
{
tOpen=Time[0];
tClose=tOpen+s*stime*60;
OrderSend(Symbol(),OP_BUY,lots,Bid,slippage,sl,tp);
flag=1;
}
if(dnfr>0 && Low[1]<dnfr && flag==0)//если фрактал вниз и уровень фрактала принижен
{
tOpen=Time[0];
tClose=tOpen+s*stime*60;
OrderSend(Symbol(),OP_SELL,lots,Ask,slippage,sl,tp);
flag=1;
}
//ЗАКРЫТИЕ ОРДЕРОВ ПО ПРОШЕСТВИИ ПРОМЕЖУТКА ВРЕМЕНИ
if(Time[0]>=tClose )// если время перед закрытием прошло
{
Print("ФУНКЦИЯ ЗАКРЫТИЯ");
OrClose();
flag=0;
}
//----
return(0);
}
//+------------------------------------------------------------------+
//закрыть все ордера
void OrClose()
{
for(int i=OrdersTotal()-1;i>=1;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
OrderClose(OrderTicket(),lots,OrderOpenPrice(),0.0005);
}
}
return(0);
}
Помогите с кодом плз! почему у меня вылетает в этом коде 138 ошибка??? да и при чем она вообще тут? сделки открываются, но при закрытии цены почему то не те, что такое?
измените на
Доброго времени суток.
Помогите разобраться с открытием ордеров. Ставлю советника на демо счет, когда совершается условие на покупку или на продажу,то показывает 130 ошибку.
Вот функция открытия ордеров:
С расчетом лота все в порядке, проверял на другом советнике.
Демо счет у Альпари, тип Микро. тейк и стоп стоят 100 п., соотв. 10 пунктов, т.к. у Альпари 5-ти знак
Цену открытия нормализуйте
А как нормализовать её?
Так?
Если так, то ничего не меняется.
У меня мало опыта пока в програмированнии. Объясните пожалуйста, как нормализовать её?
добрый вечер. Вопрос такой, при закрытии части сделки советник как бы открывает новую сделку с новым тикетом. А магик у нового ордера остается прежним?