[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 594

 

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);
}
 
Qwertee:

Помогите с кодом плз! почему у меня вылетает в этом коде 138 ошибка??? да и при чем она вообще тут? сделки открываются, но при закрытии цены почему то не те, что такое?

OrderClose(OrderTicket(),lots,OrderOpenPrice(),0.0005);

измените на

         if(OrderType()==OP_BUY)
           {
            OrderClose(OrderTicket(),OrderLots(),Bid,slippage);
           }
         else
           {
            OrderClose(OrderTicket(),OrderLots(),Ask,slippage);
           }
 
Доброе время суток. Профи, кто имел дело с индикатором Zigzag подскажите как получить последние два значения вершин: High и Low?
 

Доброго времени суток.

Помогите разобраться с открытием ордеров. Ставлю советника на демо счет, когда совершается условие на покупку или на продажу,то показывает 130 ошибку.

Вот функция открытия ордеров:

int NewOrder(int Cmd,double Lot)
{double TP=0; //тейкпрофит
 double SL=0; //стоплосс
 double PR=0; //Цена
 while(!IsTradeAllowed()) Sleep(100);
 RefreshRates ();
 if(Cmd==OP_BUY)
   {PR=Ask;
    if(TakeProfit>0) TP=NormalizeDouble(Ask+TakeProfit*Point,Digits);
    if(StopLoss>0) SL=NormalizeDouble(Bid-StopLoss*Point,Digits);}
 if(Cmd==OP_SELL)
   {PR=Bid;
    if(TakeProfit>0) TP=NormalizeDouble(Bid-TakeProfit*Point,Digits);
    if(StopLoss>0) SL=NormalizeDouble(Ask+StopLoss*Point,Digits);}
 int tic=OrderSend(Symbol(),Cmd,Lot,PR,20,SL,TP,"",0,0,CLR_NONE);
 if(tic<0) Print("Ошибка открытия ордера: ",GetLastError());
return(tic);}

С расчетом лота все в порядке, проверял на другом советнике.

Демо счет у Альпари, тип Микро. тейк и стоп стоят 100 п., соотв. 10 пунктов, т.к. у Альпари 5-ти знак

 
Цену открытия нормализуйте
 
FAQ:
Цену открытия нормализуйте


А как нормализовать её?

Так?

PR=NormalizeDouble(Ask,Digits);

Если так, то ничего не меняется.

У меня мало опыта пока в програмированнии. Объясните пожалуйста, как нормализовать её?

 
Тогда проверьте предварительно проверьте размер стоплевела, если он больше чем ваши стоп и профит - подкорректируйте их. если он равен нулю. тогда вам нужно сначала установить ордер с нулевыми стопом и профитом, а потом модифицировать их до нужных уровней.
 

добрый вечер. Вопрос такой, при закрытии части сделки советник как бы открывает новую сделку с новым тикетом. А магик у нового ордера остается прежним?

 
Установил MetaTrader 4, открыл демо-счёт. Попробовал открыть-закрывать ордера. Как теперь сделать так, чтобы терминал сам запускал ордер на продажу при повышении цены и на покупку при понижении, используя для этого инфу наподобие "необходима разница в 2 свечки для закрытия старого ордера и открытия нового"?
Причина обращения: