Дружище!
Если хочешь чтоб кто-нибудь ковырял твой кривой код, детально комментируй каждую строку.
Особенно в части логики, что и почему.
И алгоритм неплохо написать словами. Кратко.

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Друзья, пишу советника на основе индикатора, ранее опубликованного одним из экспертов-трейдеров на данном форуме.
вроде бы, все должно быть корректно... но мой советник не открывает сделок на продажу... помогите, пожалуйста, найти ошибку в коде...
заранее ОГРОМНОЕ спасибо вам.
//+------------------------------------------------------------------+
//|
//|
//|
//+------------------------------------------------------------------+
// StopLoss level
extern double sl = 50;
extern double lots = 1; //0.01 -> 1
extern int MagicNumber = 87878;
static int prevtime = 0;
//Глобальные переменные для trailing-stop
extern double tr_st_buy = 30;//50;
extern double tr_st_sell = 30;//50;
extern double pribavlenie = 30;//50;
extern double pribavlenie1 = 30;//50;
//===================================================================
//Глобальные переменные, отслеживающие наличие открытого ордера
double sell_order_open;
double buy_order_open;
//===================================
extern int period=8;//12;
extern int porog =3;
extern int metod =1;
extern int metod2=1;
extern int prise =0;
//===================================
int state_xma=0;
int change_state=0;
//========================================
//===================================
// ЗАМЕНЯЕМ ИНДИКАТОР АС на АО (и, поэтому, не используем средние)
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//========================================
//Проверка на наличие необходимого количества средств на счете
if(AccountFreeMargin()<100) // деньги кончились
{
Print("деньги кончились = ", AccountFreeMargin());
return(0);
}
//========================================
if(Time[0] == prevtime)
return(0);
prevtime = Time[0];
int spread = 3;
//----
if(IsTradeAllowed())
{
RefreshRates();
spread = MarketInfo(Symbol(), MODE_SPREAD);
}
else
{
prevtime = Time[1];
return(0);
}
//=============================================
sell_order_open = 0;
buy_order_open = 0;
//=============================================
//==============================================
double
M_0, M_1, // Значение MAIN на 0 и 1 барах
S_0, S_1, // Значение SIGNAL на 0 и 1 бар
St_M_0, St_M_1, // Значение MAIN на 0 и 1 барах
St_S_0, St_S_1; // Значение SIGNAL на 0 и 1 бар
Comment("colour = " + xma_coloured() + "state_change = "+change_state);
string period = 0 ; //PERIOD_H1 PERIOD_M30
string Sym= Symbol();
//===============
state_xma=0;
change_state=0;
//=============================================
int ticket = -1;
// check for opened position
int total = OrdersTotal();
//----
for(int i = total - 1; i >= 0; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
// check for symbol & magic number
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
int prevticket = OrderTicket();
// long position is opened
if(OrderType() == OP_BUY)
{
// check profit
if ( (xma_coloured()== 1) ) //
{
if ((xma_coloured()== 1) )//
{
PlaySound("Close.wav");
OrderClose(OrderTicket(), lots, Bid, 2, Green);
buy_order_open = 0;
// tr_st_buy = pribavlenie;//
}
else
{
}
}
//========================================================================
// Трейлинг
if (Bid - OrderOpenPrice()>=tr_st_buy* Point)
{
OrderModify(OrderTicket(), OrderOpenPrice(),Bid - pribavlenie*Point,OrderOpenPrice()+ (sl*1+spread)*Point, 0, Blue); //sl*1
tr_st_buy = tr_st_buy+pribavlenie;
}
//SarTrailingStop();
//========================================================================
// short position is opened
}
else
{
// check profit
if ( (xma_coloured()== -1) ) //
{
if ( (xma_coloured()== -1) ) //
{
PlaySound("Close.wav");
OrderClose(OrderTicket(), lots, Ask, 2, Green);
sell_order_open = 0;
// tr_st_sell = pribavlenie1;
}
else
{
}
//=================================================================
}
//========================================================================
// Трейлинг
if (OrderOpenPrice() - Ask >= tr_st_sell* Point)
{
OrderModify(OrderTicket(), OrderOpenPrice(), Ask + pribavlenie*Point, Ask - (sl*1 +spread) *Point, 0, Blue);
tr_st_sell = tr_st_sell+pribavlenie;
}
//========================================================================
}
}
}
//Выставляем ордера на покупку или продажу==========================
// check for long or short position possibility
//--------------------------------------------------
if ( (xma_coloured()== -1)&& (change_state==2) ) //
{
//--------------------------------------------------
if ( buy_order_open==0 )
{
//================================================
PlaySound("Buy_sound.wav");
//===============================================
//long
ticket = OrderSend(Symbol(), OP_BUY, lots, Ask, 3, Bid - sl * Point, 0, "Buy", MagicNumber, 0, Blue); // 0->Bid + (sl*1+spread)*Point
//----
if(ticket < 0)
{
Sleep(30000);
prevtime = Time[1];
}
//-------------------------------------------------
buy_order_open = 1;
}
//===============================================
}
if ( (xma_coloured()==1)&& (change_state==1) ) //
{
//--------------------------------------------------
if ( sell_order_open==0 )
{
//================================================
PlaySound("Sell_sound.wav");
//===============================================
// short
ticket = OrderSend(Symbol(), OP_SELL, lots, Bid, 3, Ask + sl * Point, 0, "Sell", MagicNumber, 0, Red); // 0-> Ask - (sl*1 +spread) *Point
if(ticket < 0)
{
Sleep(30000);
prevtime = Time[1];
}
//-------------------------------------------------
sell_order_open = 1;
}
//===============================================
}
//===============================================
return(0);
}
//==============================================================
int xma_coloured(){
int limit;
double tmp1,tmp2;
int colour = 0;
int i;
i=0;
//--------------------------------
tmp1=iMA(Symbol(),0,period,0,metod,prise,i);
tmp2=iMA(Symbol(),0,period,1,metod2,prise,i);
if(MathAbs(tmp1-tmp2)>=porog*Point)
{
if(Open[0]<=tmp2)//Close[1]
{
//сигнал на продажу
colour=1;
if (state_xma==1)
{
change_state=0;// уже был сигнал на продажу, подтвердили его наличие
}
else
if (state_xma!=1)
{
state_xma=1;
change_state=1; //поступил сигнал на продажу после флета или восходящей тенденци
return(colour);
}
}
// else
if(Open[0] >tmp2) //Open[i] >tmp2
{
//сигнал на покупку
colour = -1;
if (state_xma==2)
{
change_state=0;// уже был сигнал на покупку, подтвердили его наличие
}
else
if (state_xma!=2)
{
state_xma=2;
change_state=2; //поступил сигнал на покупку после флета или нисходящей тенденции
return(colour);
}
}
}
else
{
state_xma=0;
}
//--------------------------------
return (colour);
}
//=============================================================