Как на текущем графике использовать данные других графиков - страница 2

 
Vinin писал (а):

Как можно поставить флаг?

bool flag=false;

int start(){


int ticket;


..........


// обработка условий для входа


if (.......) flag=flase


if (!flag) {


ticket=OrderSend(......);


}


if (ticket>0) flag=true;


}


Примерно так.




Да вы правы Вторая позиция открывается на этом же баре, как только первая закрывается по трэйлинг стопу. Так как бар еще первый после срабатывания сигнала, позиция вновь открывается. я составил код с флагом, но все попрежнему. Посмотрите пожалуйста что не так. А на счет вашего мнения по поводу изучения учебников, вы правы. Я стараюсь их освоить, но воспринимаю только ту информацию, которая мне более менее понятна (шутка ли,  всего три недели заниматься програмированием, когда не было никакого опыта, да и образование гуманитария). А чужой опыт это что-то живое в отличие от штампов учебников, через него учишся.

extern double Lots = 0.1;
extern double TrailingStop = 30;

//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
bool flag=false;
double ma_tm, ma_tm1, ma_ts, ma_ts1;
double ma_dm, ma_ds;
int cnt, ticket, total;

if(Bars<100)
{
Print("bars less than 100");
return(0);
}
ma_tm=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
ma_tm1=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_MAIN,2);
ma_ts=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
ma_ts1=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,2);
ma_dm=iMACD("GBPJPY",PERIOD_H1,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
ma_ds=iMACD("GBPJPY",PERIOD_H1,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
//задали все данные для МАСD

total=OrdersTotal();
if(total<1)
{
// Проверка свободной маржи
if(AccountFreeMargin()<(1000*Lots))
{
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
// Условие открытие позиции BUY
if(ma_dm>ma_ds&&ma_ts1>ma_tm1&&ma_tm>ma_ts)
{
flag=false;
if (!flag)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"",16384,0,Green);
if(ticket>0)flag=true;
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
}
return(0);
}
else Print("Error opening BUY order : ",GetLastError());
return(0);
}
// Условие открытие позиции SELL
if(ma_ds>ma_dm&&ma_tm1>ma_ts1&&ma_ts>ma_tm)
{
flag=false;
if (!flag)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"",16384,0,Red);
if(ticket>0) flag=true;
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
}
return(0);
}
else Print("Error opening SELL order : ",GetLastError());
return(0);
}
return(0);
}
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL &&
OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY) // длинная позиция открыта
{
// условие закрытие длинной позиции
if(ma_tm1>ma_ts1&&ma_ts>ma_tm)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);
return(0);
}
// трейлинг-стоп для длинной позиции
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<Bid-Point*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(), 0,Green);
return(0);
}
}
}
}
else
{
// условие закрытия короткой позиции
if(ma_ts1>ma_tm1&&ma_tm>ma_ts)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);
return(0);
}
// трейлинг-стоп для короткой позиции
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
{
if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(), 0,Red);
return(0);
}
}
}
}
}
}
return(0);
}
 
Kostay:
Vinin писал (а):

Как можно поставить флаг?


Да вы правы Вторая позиция открывается на этом же баре, как только первая закрывается по трэйлинг стопу. Так как бар еще первый после срабатывания сигнала, позиция вновь открывается. я составил код с флагом, но все попрежнему. Посмотрите пожалуйста что не так. А на счет вашего мнения по поводу изучения учебников, вы правы. Я стараюсь их освоить, но воспринимаю только ту информацию, которая мне более менее понятна (шутка ли, всего три недели заниматься програмированием, когда не было никакого опыта, да и образование гуманитария). А чужой опыт это что-то живое в отличие от штампов учебников, через него учишся.


Может сперва сформулируешь условия смены флага на бумаге. Например.

1. Есть открытые ордера - flag=true

2. Мы сами закрыли ордер - flag=false

3, Не закончился бар и flag=true, оставить как есть.

И так далее.

Нужно расписать все варианты в каких случаях какое значение принимает флаг.

Пока ты безо всяких оснований меняшь значения флага.

И возможно тебе понадобится еще один флаг (для контроля закрытия бара).

 
Не буду открывать новой страницы, спрошу здесь.
Как при написаниии советника, вызвать пользовательские индикоторы ZigZag и Heiken Ashi?
При использовании "обычного" индикатора значения устанавливаюся ma=iMA(NULL...). Как быть здесь пожалуйста покажите на примере с небольшим кодом!
Заранее спасибо!
 
Kostay:
Не буду открывать новой страницы, спрошу здесь.
Как при написаниии советника, вызвать пользовательские индикоторы ZigZag и Heiken Ashi?
При использовании "обычного" индикатора значения устанавливаюся ma=iMA(NULL...). Как быть здесь пожалуйста покажите на примере с небольшим кодом!
Заранее спасибо!


Через iCustom().
 
Vinin писал (а)


Через iCustom().

Не нашел инфомацию про эту функцию. Где можно посмотреть. распишите для примера индикатор ZigZag для
нулевого бара, какие параметры в  iCustom(?,?,?,...)?