[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 918

 
Как определить какой тип ордера селл или бай, открыт и по какому лоту?
 
Maniac:

Всем здрасте! В советнике имеется такой код (см. ниже). Как я понял сигнал на открытие позиции берется из показателей двух индюков. Как сделать так, чтобы ордера открывались на основании только одного индикатора, например CCI? Большое спасибо.

Вместо вызова getSignal() для определения критерия открытия, вызывайте либо checkCCI(), либо checkMomentum(). Обе эти ф-ции возвращают те же сигналы, что и getSignal(), а именно 0, 1 и -1.

В функции getSignal() просто происходит сравнение двух значений, возвращаемых ф-циями checkCCI() и checkMomentum() и при их совпадении возвращается 1 (на покупку) или -1 (на продажу), ну и 0 - если ничего не делать...

 
_SS_:
Как определить какой тип ордера селл или бай, открыт и по какому лоту?

Сделать перебор ордеров терминала, проверить магик выбранного ордера, его тип и его лот.

Магик - для идентификации принадлежности ордера вашему советнику, ну а тип и лот - искомые величины...

Если ищите последний открытый ордер, то необходимо сравнить его время открытия со временем открытия других ордеров и, если его время наибольшее, то это он.

Если ищите по тикету, то выбирать нужно по тикету, но учитывать, что выбор происходит из двух массивов - рыночных и закрытых ордеров.

Для того чтобы узнать, что ордер является рыночным, необходимо проверить время его закрытия и, если оно больше ноля (и только в этом случае), то ордер уже закрытый, иначе - рыночный.

 
а как вывести магик?
 
forex-k:
должен работать. смайлик улыбается?


extern double StopLoss=50.0;
extern double TakeProfit=50.0;
extern double Lots=1;
extern int total;

int start()
{
double Price_1, Price_2, min, max;
RefreshRates();
Price_1=Bid;
Price_2=Ask;

min=iLow(NULL,0,2);
max=iHigh(NULL,0,2);
total=OrdersTotal();
if(total<1)
{

if(Price_1>max)
OrderSend(Symbol(),OP_BUY,Lots,Ask,5,Bid-StopLoss*Point,Ask+TakeProfit*Point,"My order#",16384,0,Green);

if(Price_2<min)
OrderSend(Symbol(),OP_SELL,Lots,Bid,5,Ask+StopLoss*Point,Bid-TakeProfit*Point,"My order#",16384,0,Green);
}
}
return(0);

да работает,смайлик постоянно улыбается,но не пашет,позиции не открываются

 
rustein:

помогите, советник не закрывает все ордера при достижении профита

открытые и отложенные ордера закрываются разными функциями


void CloseAllOrders()
{
for (int i = 0; i < OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS))
{
if (OrdersTotal() > 1 && OrderSymbol() == Symbol() && AccountProfit() >= AccountBalance()*AllProfit/100)
{
if((OrderType()==OP_BUY)) OrderClose(OrderTicket(), OrderLots(),Bid,0);
if((OrderType()==OP_SELL)) OrderClose(OrderTicket(), OrderLots(),Ask,0);
if((OrderType()==OP_BUYSTOP || OrderType()==OP_BUYLIMIT|| OrderType()==OP_SELLSTOP || OrderType()==OP_SELLLIMIT))OrderDelete(OrderTicket());
if(UseSound == true)
{
PlaySound(SuccesSound);
}
}
}
}
}
 
forex-k:

открытые и отложенные ордера закрываются разными функциями


Спасибо :)
 

Подскажите, как удалить объекты, созданные индикатором в окне при удалении самого индикатора с графика? 

 
Maniac:

Всем здрасте! В советнике имеется такой код (см. ниже). Как я понял сигнал на открытие позиции берется из показателей двух индюков. Как сделать так, чтобы ордера открывались на основании только одного индикатора, например CCI? Большое спасибо.


int getSignal() { 
   int CCI = checkCCI();
   return (CCI);
}
int checkCCI() {
   double CCI = iCCI(NULL, 0, 60, PRICE_TYPICAL, 1);
   Print("CCI: ", CCI);
   if (CCI > 0.0) return (1);
   if (CCI < 0.0) return (-1);
   return (0);
} 
 

Доброго дня всем. Нужна функция поиска хаев / лоу за N количество баров. Допустим хаи/лоу за 55 баров. Где-то видел - не могу найти.