для начала вставьте код через кнопку "SRC"
if( summaord<1&&bBars!=Bars) { bBars=Bars; .... ...... ........ }
int start() // Спец. функция start { double M_0, M_1, // Значение MAIN на 0 и 1 барах S_0, S_1; // Значение SIGNAL на 0 и 1барах int i,ii, summaord,bBars; summaord=OrdersTotal(); //-------------------------------------------------------------------- // Обращение к функции техн.индикат. M_0 = iStochastic(NULL,0,K,D,Z,MODE_SMMA,0,MODE_MAIN, 0);// 0 бар ,M_0 на нулевом баре имеет это значение M_1 = iStochastic(NULL,0,K,D,Z,MODE_SMMA,0,MODE_MAIN, 1);// 1 бар ,M_1 на предыдущем баре имеет это значение S_0 = iStochastic(NULL,0,K,D,Z,MODE_SMMA,0,MODE_SIGNAL,0);// 0 бар ,S_0 на нулевом баре имеет это значение S_1 = iStochastic(NULL,0,K,D,Z,MODE_SMMA,0,MODE_SIGNAL,1);// 1 бар ,S_1 на предыдущем баре имеет это значение //-------------------------------------------------------------------- if( M_0 >= S_0 && M_1 < S_1 ) { if( summaord<1) { Alert("сигнальная пересекает трендовую с верху вниз. открываем покупку.OP_BUY"); OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0); Print("BUY order opened : ",OrderOpenPrice()); } for ( i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true) if(OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),MarketInfo(Symbol(),MODE_SPREAD)); if(Bid-OrderOpenPrice()>Point*TrailingStop) { if(OrderStopLoss()<Bid-Point*TrailingStop) { OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,0,0,Green); return(0); } } } } if( M_0 <= S_0 && M_1 > S_1 ) { if( summaord<1) { Alert("сигнальная пересекает трендовую снизу вверх открываем продажу OP_SELL."); OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0); Print("SELL order opened : ",OrderOpenPrice()); } for ( ii=0;ii<OrdersTotal();ii++) { if(OrderSelect(ii,SELECT_BY_POS,MODE_TRADES)==true) if(OrderType()==OP_BUY) OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),MarketInfo(Symbol(),MODE_SPREAD)); if((OrderOpenPrice()-Ask)>(Point*TrailingStop)) { if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0)) { OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,0,0,Red); } } } } return(0); }
Вот код программы, пока ничего не получилось
Совет на будущее - скобки одинаковой глубины залегания ставь четко одна под другой, и так же строки.
А после if() всегда {}. Здорово дисциплинирует. И видно на какой глубине находишься.
Программа не симметрично написана.
Алгоритм и логика совершенно кривые. Телега впереди лошади.
- если кривые пересеклись.
- если ордеров нету. - входим с продажей.
- выбираем этот ордер (единственный) и проверяем - может он БАЙ ??!! Абсурд. Делать это надо до того.
- если цена откр-я минус АСК больше трала, то СтопЛосс минус АСК тем более! Это при первой модификации.
При последующих проверять по СтопЛосс. И желательно ввести шаг модификации, иначе можешь засыпать сервак запросами.
Вот в таком духе, в таком разрезе.
Удачи.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
int start() // Спец. функция start
{
double M_0, M_1, // Значение MAIN на 0 и 1 барах
S_0, S_1; // Значение SIGNAL на 0 и 1барах
int i,ii, summaord;
summaord=OrdersTotal();
//--------------------------------------------------------------------
// Обращение к функции техн.индикат.
M_0 = iStochastic(NULL,0,K,D,Z,MODE_SMMA,0,MODE_MAIN, 0);// 0 бар,M_0 на нулевом баре имеет это значение
M_1 = iStochastic(NULL,0,K,D,Z,MODE_SMMA,0,MODE_MAIN, 1);// 1 бар,M_1 на предыдущем баре имеет это значение
S_0 = iStochastic(NULL,0,K,D,Z,MODE_SMMA,0,MODE_SIGNAL,0);// 0 бар,S_0 на нулевом баре имеет это значение
S_1 = iStochastic(NULL,0,K,D,Z,MODE_SMMA,0,MODE_SIGNAL,1);// 1 бар,S_1 на предыдущем баре имеет это значение
//--------------------------------------------------------------------
if( M_0 >= S_0 && M_1 < S_1 )
{
if( summaord<1)
{
Alert("сигнальная пересекает трендовую с верху вниз. открываем покупку.OP_BUY");
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0);
Print("BUY order opened : ",OrderOpenPrice());
}
for ( i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
if(OrderType()==OP_SELL)
OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),MarketInfo(Symbol(),MODE_SPREAD));
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<Bid-Point*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,0,0,Green);
return(0);
}
}
}
}
if( M_0 <= S_0 && M_1 > S_1 )
{
if( summaord<1)
{
Alert("сигнальная пересекает трендовую снизу вверх открываем продажу OP_SELL.");
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0);
Print("SELL order opened : ",OrderOpenPrice());
}
for ( ii=0;ii<OrdersTotal();ii++)
{
if(OrderSelect(ii,SELECT_BY_POS,MODE_TRADES)==true)
if(OrderType()==OP_BUY)
OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),MarketInfo(Symbol(),MODE_SPREAD));
if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
{
if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,0,0,Red);
}
}
}
}
return(0);
}
Когда ордер закрывается по трейлинг стопу, цикл заканчивается, идет снова проверка условия if( M_0 >= S_0 && M_1 < S_1 ) и если бар еще не сменился (т.е. условие сново становится верным) снова открывается ордер (((
но по задумке -при этом условии- должен быть открыт только один ордер не важно, закроется ли он по SL или нет! И также один ордер должен открываться при противоположном условии
if( M_0 <= S_0 && M_1 > S_1 )
Как мне это осуществить??? помогите пожалуйсто