Ответ
 
Опции темы
Старый 28.12.2014, 21:37   #3341 (permalink)
Abi
Элитный участник
 
Аватар для Abi
 
Регистрация: 21.12.2010
Адрес: Kz Казахстан
Сообщений: 970
Репутация: 1695
Abi Abi Abi Abi Abi Abi Abi Abi Abi Abi Abi
Сказал(а) спасибо: 552
Поблагодарили 1,693 раз(а) в 559 сообщениях
Поинты: 551
Слушай,Юра... Не надо так эмоционально...
Вам тут пытаются помочь, наверно.
Не выкладыванием готового кода(что порочно в корне), а натолкнуть на решение.
Вы ведь программируете, как выяснилось.
Что мешает вам вынести в extern int коды сигналов? И пусть они будут хоть "блюдечко с голубой каемочкой" - главное чтоб для них был определен код.
Вносите во внешние данные какие коды искать и вуаля!!! Универсальный поисковик сигналов готов!!!
Abi вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Yura Vakulenko (28.12.2014)
Старый 28.12.2014, 21:43   #3342 (permalink)
Активный участник
 
Аватар для Yura Vakulenko
 
Регистрация: 04.12.2013
Адрес: Швейцария, Cham
Сообщений: 129
Репутация: 77
Yura Vakulenko
Сказал(а) спасибо: 62
Поблагодарили 76 раз(а) в 39 сообщениях
Поинты: 172
Сообщение от Abi Посмотреть сообщение
Слушай,Юра... Не надо так эмоционально...
Вам тут пытаются помочь, наверно.
Не выкладыванием готового кода(что порочно в корне), а натолкнуть на решение.
Вы ведь программируете, как выяснилось.
Что мешает вам вынести в extern int коды сигналов? И пусть они будут хоть "блюдечко с голубой каемочкой" - главное чтоб для них был определен код.
Вносите во внешние данные какие коды искать и вуаля!!! Универсальный поисковик сигналов готов!!!
я не знаю, как написать функцию, которая будет искать коды стрелок.. я еще совсем начинающий в программировании. я просто уже второй день долбаюсь над этой простейшей задачей) уже все, что можно написал и описал.. а ордера так и не открываются.. хотя индикатор инициализируется и появл на графике..

проще, проверить условие появления стрелки. по-крайне мере мне так кажется.. да и не у всех индикаторов есть стрелки.

я уже написал и новый код.. все-равно ничего у меня с открытием ордеров не выходит! и даже кодов ошибок не выдает! вот новый код.

НОВЫЙ КОД


//+------------------------------------------------------------------+
//| indicator_test.mq4 |
//| |
//| |
//+------------------------------------------------------------------+
#property copyright ""
#property link ""
//--------------------------------------------------------------------
extern int SmoothPeriod = 5,
SmoothMethod = 1,
Notify = 0;
extern double stoploss = 0,
takeprofit = 0,
TrailingStop = 0;
extern double LOT = 0.1;
extern bool Close_on_Oposite = true;
extern bool Buy_allow = true;
extern bool Sell_allow = true;
//--------------------------------------------------------------------
int STOPLEVEL,Magic=1234567890;
int timeprev = 0;
//--------------------------------------------------------------------

int OnInit()
{

return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason) { }


int start()
{
if (timeprev == Time[0]) return (0);
timeprev = Time[0];
STOPLEVEL=MarketInfo(Symbol(),MODE_STOPLEVEL);
if (TrailingStop>=STOPLEVEL) TrailingStop();
//if (TimeBar==Time[0]) return(0);
double bufBuy, bufBuy2,bufSell,bufSell2;

bufBuy = iCustom(NULL,0,"Arrows",SmoothPeriod,0,1);
bufBuy2 = iCustom(NULL,0,"Arrows",SmoothPeriod,0,2);
bufSell = iCustom(NULL,0,"Arrows",SmoothPeriod,1,1);
bufSell2 = iCustom(NULL,0,"Arrows",SmoothPeriod,0,2);



//bufBuy = iCustom(NULL,0,"Market\\evolution",SmoothPeriod,SmoothMethod,Notify,0,1);
//bufBuy2 = iCustom(NULL,0,"Market\\evolution",SmoothPeriod,SmoothMethod,Notify,0,2);
//bufSell = iCustom(NULL,0,"Market\\evolution",SmoothPeriod,SmoothMethod,Notify,1,1);
//bufSell2 = iCustom(NULL,0,"Market\\evolution",SmoothPeriod,SmoothMethod,Notify,1,2);

double SL,TP;
if (Buy_allow)
{
if (bufBuy != EMPTY_VALUE && bufBuy2 == EMPTY_VALUE )//if (bufBuy==bufSell && bufSell2 !=EMPTY_VALUE && bufBuy2 == EMPTY_VALUE)
{
if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP = 0;
if (stoploss!=0) SL = NormalizeDouble(Bid - stoploss*Point,Digits); else SL = 0;
if (Close_on_Oposite) CLOSEORDER(OP_SELL);
int tik_buy = OrderSend(Symbol(),OP_BUY,LOT,NormalizeDouble(Ask,Digits),2,SL,TP,"Ind check buy",Magic,0,clrBlue);
if(tik_buy>0)
{
if(OrderSelect(tik_buy,SELECT_BY_TICKET,MODE_TRADES))
Print("BUY order #",tik_buy," opened : ",OrderOpenPrice());
}
else
Print("Error opening BUY order #",tik_buy," : ",GetLastError());
timeprev = Time[0];

}
}

if (Sell_allow)
{
if (bufSell != EMPTY_VALUE && bufSell2 == EMPTY_VALUE)//if (bufBuy==bufSell && bufSell2 ==EMPTY_VALUE && bufBuy2 != EMPTY_VALUE)
{
if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); else TP = 0;
if (stoploss!=0) SL = NormalizeDouble(Ask + stoploss*Point,Digits); else SL = 0;
if (Close_on_Oposite) CLOSEORDER(OP_BUY);
int tik_sell = OrderSend(Symbol(),OP_SELL,LOT,NormalizeDouble(Bid,Digits),2,SL,TP,"Ind check sell",Magic,0,clrRed);
if(tik_sell>0)
{
if(OrderSelect(tik_sell,SELECT_BY_TICKET,MODE_TRADES))
Print("SELL order #",tik_sell," opened : ",OrderOpenPrice());
}
else
Print("Error opening SELL order #",tik_sell," : ",GetLastError());
timeprev = Time[0];

}
}

return(0);
}
//--------------------------------------------------------------------
void CLOSEORDER(int ord)
{
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if (OrderType()==OP_BUY && ord==OP_BUY)
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),3,CLR_NONE);
if (OrderType()==OP_SELL && ord==OP_SELL)
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),3,CLR_NONE);
}
}
}
}
//--------------------------------------------------------------------
void TrailingStop()
{
int tip,Ticket;
double StLo,OSL,OOP;
for (int i=0; i<OrdersTotal(); i++)
{ if (OrderSelect(i, SELECT_BY_POS)==true)
{ tip = OrderType();
if (tip<2 && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
OSL = NormalizeDouble(OrderStopLoss(),Digits);
OOP = NormalizeDouble(OrderOpenPrice(),Digits);
Ticket = OrderTicket();
if (tip==OP_BUY)
{
StLo = NormalizeDouble(Bid-TrailingStop*Point,Digits);
if (StLo > OSL && StLo > OOP)
{ if (!OrderModify(Ticket,OOP,StLo,OrderTakeProfit(),0,White))
Print("TrailingStop Error ",GetLastError()," buy SL ",OSL,"->",StLo);
}
}
if (tip==OP_SELL)
{
StLo = NormalizeDouble(Ask+TrailingStop*Point,Digits);
if (StLo > OOP || StLo==0) continue;
if (StLo < OSL || OSL==0 )
{ if (!OrderModify(Ticket,OOP,StLo,OrderTakeProfit(),0,White))
Print("TrailingStop Error ",GetLastError()," sell SL ",OSL,"->",StLo);
}
}
}
}
}
}
//--------------------------------------------------------------------


[свернуть]

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Музыка веков в звуках рояля - https://soundcloud.com/yura-vakulenko

Последний раз редактировалось Yura Vakulenko; 28.12.2014 в 21:54.
Yura Vakulenko вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 28.12.2014, 23:52   #3343 (permalink)
Abi
Элитный участник
 
Аватар для Abi
 
Регистрация: 21.12.2010
Адрес: Kz Казахстан
Сообщений: 970
Репутация: 1695
Abi Abi Abi Abi Abi Abi Abi Abi Abi Abi Abi
Сказал(а) спасибо: 552
Поблагодарили 1,693 раз(а) в 559 сообщениях
Поинты: 551
Ну вот вставил ваш Arrows.ex4 в свою сову...
Все работае и ордера открывает...

Но в индюк видимо вставлена функция удаления всех объектов с чарта.
Поэтому по окончании теста нет визуализации открытия-закрытия ордеров.
На втором скрине обошел это ограничение - сделал принт-скрин прямо во время теста...
Миниатюры:
Нажмите на изображение для увеличения
Название: 1H Eur-Usd.jpg
Просмотров: 29
Размер:	329.6 Кб
ID:	189814   Нажмите на изображение для увеличения
Название: 1H Eur-Usd 2nd.jpg
Просмотров: 21
Размер:	388.8 Кб
ID:	189815  

Последний раз редактировалось Abi; 29.12.2014 в 00:09.
Abi вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Yura Vakulenko (29.12.2014)
Старый 29.12.2014, 00:05   #3344 (permalink)
Активный участник
 
Аватар для Yura Vakulenko
 
Регистрация: 04.12.2013
Адрес: Швейцария, Cham
Сообщений: 129
Репутация: 77
Yura Vakulenko
Сказал(а) спасибо: 62
Поблагодарили 76 раз(а) в 39 сообщениях
Поинты: 172
Сообщение от Abi Посмотреть сообщение
Ну вот вставил ваш Arrows.ex4 в свою сову...
Все работае и ордера открывает...

Но в индюк видимо вставлена функция удаления всех объектов с чарта.
Поэтому нет визуализации открытия-закрытия ордеров.
ух ты! а что у вас за советник? можете поделится?? плиз!

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Музыка веков в звуках рояля - https://soundcloud.com/yura-vakulenko
Yura Vakulenko вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 29.12.2014, 00:19   #3345 (permalink)
Abi
Элитный участник
 
Аватар для Abi
 
Регистрация: 21.12.2010
Адрес: Kz Казахстан
Сообщений: 970
Репутация: 1695
Abi Abi Abi Abi Abi Abi Abi Abi Abi Abi Abi
Сказал(а) спасибо: 552
Поблагодарили 1,693 раз(а) в 559 сообщениях
Поинты: 551
Сообщение от Yura Vakulenko Посмотреть сообщение
ух ты! а что у вас за советник? можете поделится?? плиз!
Это мой собственный универсальный советник-заготовка.
В него можно вставлять любой индюк или несколько индюков.
Описываю условия открытия ордеров согласно показаниям этих индюков.
По ним открываются ордера. Далее идут мои собственные фишки сопровождения бай и селл ордеров по отдельности, вывод в БУ, универсальный тралл сделок, реагирование на появление противоположного сигнала (так как сигнал индюков бывает как истинный, так и ложный) и т.д.
Abi вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 29.12.2014, 02:59   #3346 (permalink)
Активный участник
 
Аватар для Yura Vakulenko
 
Регистрация: 04.12.2013
Адрес: Швейцария, Cham
Сообщений: 129
Репутация: 77
Yura Vakulenko
Сказал(а) спасибо: 62
Поблагодарили 76 раз(а) в 39 сообщениях
Поинты: 172
Сообщение от Abi Посмотреть сообщение
Это мой собственный универсальный советник-заготовка.
В него можно вставлять любой индюк или несколько индюков.
Описываю условия открытия ордеров согласно показаниям этих индюков.
По ним открываются ордера. Далее идут мои собственные фишки сопровождения бай и селл ордеров по отдельности, вывод в БУ, универсальный тралл сделок, реагирование на появление противоположного сигнала (так как сигнал индюков бывает как истинный, так и ложный) и т.д.
Неплохой такой советник у вас? а могли бы вы поделится? я конечно понимаю, что тогда погорячился.. но просто уже нервы были на пределе) я 2 дня далбаюсь с этим кодом) не хотел..

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

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Музыка веков в звуках рояля - https://soundcloud.com/yura-vakulenko
Yura Vakulenko вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 29.12.2014, 04:59   #3347 (permalink)
Активный участник
 
Аватар для Yura Vakulenko
 
Регистрация: 04.12.2013
Адрес: Швейцария, Cham
Сообщений: 129
Репутация: 77
Yura Vakulenko
Сказал(а) спасибо: 62
Поблагодарили 76 раз(а) в 39 сообщениях
Поинты: 172
подскажите, как мне изменить код советника, чтобы была соблюдена следующая логика закрытия позиций. Для большей наглядности - я все изобразил на картинках.

Позиция закрывается полностью (100% объема) по противоположному сигналу (Большая КРАСНАЯ \ СИНЯЯ стрелки) и позиция закрывается частично по дополнительным сигналам (Маленькие желтые\синие стрелки). Все стрелки формируются на 1-м баре. И советник работает только по открытию бара.

т.е. Основной сигнал на закрытие позиции (и открытие противоположной) - это БОЛЬШИЕ СТРЕЛКИ

Дополнительный сигнал на закрытие Основной позиции - это маленькие стрелки. (Желтая малая стрелка - закрытие продаж. Синяя малая стрелка - закрытие покупок.)

Логика закрытия:

за начальную точку отсчета берется время открытия основной позиции. Одновременно в рынке может быть открыта 1 основная позиция ( по ОСНОВНОМУ СИГНАЛУ - БОЛЬШИЕ СТРЕЛКИ)

Малые стрелки, чтобы использовать их в роли доп. сигнала на закрытие - должны появится только после открытия основной позиции.

появилась 1-я малая стрелка - закрываем 25 % основной позиции. (при условии, что цена открытия нового бара, после появления малой стрелки больше\меньше внешней переменной N ). Если условие верно, тогда закрываем 25% основной позиции. Если не верно - тогда закрываем 0% основной позиции. На данном этапе закрыто или 0% или 25% основной позиции.

появилась 2-я малая стрелка - закрываем еще 25% основной позиции. (при условии, что на первой стрелке уже было закрытие 25 % основной позиции. если же такого закрытия не было, тогда закрываем 50% основной позиции.) На данном этапе закрыто или 50% основной позиции.

появилась 3-я малая стрелка - закрываем еще 25% основной позиции.
На данном этапе закрыто или 75% основной позиции.

появилась 4-я малая стрелка - закрываем еще 25% основной позиции. На данном этапе закрыто 100% основной позиции. Т.е. ордер закрыт. 4-я стрелка появляется крайне редко! в основном их только 3. и оставшиеся 25% позиции, после первых 3-х стрелок закрываются по основному противоположному сигналу.

если же не появилось ни одной из малых стрелок, тогда позиция закрывается на 100% по против. основному сигналу.

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

Условие появления доп. стрелок - я смогу составить и сам.. но, я, к сожалению, не смогу вам скинуть индикатор, который их рисует, все по той же причине - он привязан к моему ПК и счету и на другом ПК и счете работать не будет..

Помогите встроить такую функцию в код советника.

а вот текущий код советника..

Код СОВЕТНИКА


//+------------------------------------------------------------------+
//| indicator_test.mq4 |
//| |
//| |
//+------------------------------------------------------------------+
#property copyright ""
#property link ""
//--------------------------------------------------------------------
extern int SmoothPeriod = 5,
SmoothMethod = 1,
Notify = 0;
extern double stoploss = 0,
takeprofit = 0,
TrailingStop = 0;
extern double LOT = 0.1;
extern bool Close_on_Oposite = true;
extern bool Buy_allow = true;
extern bool Sell_allow = true;
extern bool mode_reverse = false;
//--------------------------------------------------------------------
int STOPLEVEL,Magic=1234567890;
//int redOrblueFlag=7;

//--------------------------------------------------------------------

int OnInit()
{

return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason) { }


int start()
{
int timeprev=0;
if (timeprev == Time[0]) return (0);
timeprev = Time[0];
//if (!NewBar()) return;
STOPLEVEL=MarketInfo(Symbol(),MODE_STOPLEVEL);
if (TrailingStop>=STOPLEVEL) TrailingStop();
//if (TimeBar==Time[0]) return(0);
double bufBuy, bufBuy2,bufSell,bufSell2;

//bufBuy = iCustom(NULL,0,"Arrows",SmoothPeriod,0,1);
//bufSell = iCustom(NULL,0,"Arrows",SmoothPeriod,1,1);

bufBuy = iCustom(NULL,0,"Market\\evolution",SmoothPeriod,SmoothMethod,Notify,0,1);
bufBuy2 = iCustom(NULL,0,"Market\\evolution",SmoothPeriod,SmoothMethod,Notify,0,2);
bufSell = iCustom(NULL,0,"Market\\evolution",SmoothPeriod,SmoothMethod,Notify,1,1);
bufSell2 = iCustom(NULL,0,"Market\\evolution",SmoothPeriod,SmoothMethod,Notify,1,2);

double SL,TP;
if (Buy_allow)
{
if (bufBuy==bufSell && bufSell2 !=0 && bufBuy2 == 0)//if (bufBuy != 0 && bufSell == 0 )//
{
if (!mode_reverse)
{
if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP = 0;
if (stoploss!=0) SL = NormalizeDouble(Bid - stoploss*Point,Digits); else SL = 0;
if (Close_on_Oposite) CLOSEORDER(OP_SELL);
int tik_buy = OrderSend(Symbol(),OP_BUY,LOT,NormalizeDouble(Ask,Digits),2,SL,TP,"Ind check buy",Magic,0,clrBlue);
if(tik_buy>0)
{
if(OrderSelect(tik_buy,SELECT_BY_TICKET,MODE_TRADES))
Print("BUY order #",tik_buy," opened : ",NormalizeDouble(OrderOpenPrice(),Digits));
}
else
Print("Error opening BUY order #",tik_buy," : ",GetLastError());
}

else

{
if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); else TP = 0;
if (stoploss!=0) SL = NormalizeDouble(Ask + stoploss*Point,Digits); else SL = 0;
if (Close_on_Oposite) CLOSEORDER(OP_BUY);
int tik_sell_on_reverse_buy = OrderSend(Symbol(),OP_SELL,LOT,NormalizeDouble(Bid,Digits),2,SL,TP,"Ind check sell",Magic,0,clrRed);
if(tik_sell_on_reverse_buy>0)
{
if(OrderSelect(tik_sell_on_reverse_buy,SELECT_BY_TICKET,MODE_TRADES))
Print("SELL order #",tik_sell_on_reverse_buy," opened : ",NormalizeDouble(OrderOpenPrice(),Digits));
}
else
Print("Error opening SELL order #",tik_sell_on_reverse_buy," : ",GetLastError());

}

}
}

if (Sell_allow)
{
if (bufBuy==bufSell && bufSell2 ==0 && bufBuy2 != 0)//if (bufSell != 0 && bufBuy == 0)//
{
if (!mode_reverse)
{

if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); else TP = 0;
if (stoploss!=0) SL = NormalizeDouble(Ask + stoploss*Point,Digits); else SL = 0;
if (Close_on_Oposite) CLOSEORDER(OP_BUY);
int tik_sell = OrderSend(Symbol(),OP_SELL,LOT,NormalizeDouble(Bid,Digits),2,SL,TP,"Ind check sell",Magic,0,clrRed);
if(tik_sell>0)
{
if(OrderSelect(tik_sell,SELECT_BY_TICKET,MODE_TRADES))
Print("SELL order #",tik_sell," opened : ",NormalizeDouble(OrderOpenPrice(),Digits));
}
else
Print("Error opening SELL order #",tik_sell," : ",GetLastError());

}

else

{
if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP = 0;
if (stoploss!=0) SL = NormalizeDouble(Bid - stoploss*Point,Digits); else SL = 0;
if (Close_on_Oposite) CLOSEORDER(OP_SELL);
int tik_buy_on_reverse_sell = OrderSend(Symbol(),OP_BUY,LOT,NormalizeDouble(Ask,Digits),2,SL,TP,"Ind check buy",Magic,0,clrBlue);
if(tik_buy_on_reverse_sell>0)
{
if(OrderSelect(tik_buy_on_reverse_sell,SELECT_BY_TICKET,MODE_TRADES))
Print("BUY order #",tik_buy_on_reverse_sell," opened : ",NormalizeDouble(OrderOpenPrice(),Digits));
}
else
Print("Error opening BUY order #",tik_buy_on_reverse_sell," : ",GetLastError());

}
}
}

return (0);
}
//--------------------------------------------------------------------
void CLOSEORDER(int ord)
{
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if (OrderType()==OP_BUY && ord==OP_BUY)
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),3,CLR_NONE);
if (OrderType()==OP_SELL && ord==OP_SELL)
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),3,CLR_NONE);
}
}
}
}
//--------------------------------------------------------------------
void TrailingStop()
{
int tip,Ticket;
double StLo,OSL,OOP;
for (int i=0; i<OrdersTotal(); i++)
{ if (OrderSelect(i, SELECT_BY_POS)==true)
{ tip = OrderType();
if (tip<2 && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
OSL = NormalizeDouble(OrderStopLoss(),Digits);
OOP = NormalizeDouble(OrderOpenPrice(),Digits);
Ticket = OrderTicket();
if (tip==OP_BUY)
{
StLo = NormalizeDouble(Bid-TrailingStop*Point,Digits);
if (StLo > OSL && StLo > OOP)
{ if (!OrderModify(Ticket,OOP,StLo,OrderTakeProfit(),0,White))
Print("TrailingStop Error ",GetLastError()," buy SL ",OSL,"->",StLo);
}
}
if (tip==OP_SELL)
{
StLo = NormalizeDouble(Ask+TrailingStop*Point,Digits);
if (StLo > OOP || StLo==0) continue;
if (StLo < OSL || OSL==0 )
{ if (!OrderModify(Ticket,OOP,StLo,OrderTakeProfit(),0,White))
Print("TrailingStop Error ",GetLastError()," sell SL ",OSL,"->",StLo);
}
}
}
}
}

}

//--------------------------------------------------------------------

bool NewBar()
{
static datetime new_Bar;
if (new_Bar == Time[1]) return(false); //Если бар не закрыт - выход
new_Bar = Time[1];
return(true);
}
[свернуть]


Смотрите рисунки ниже.
Миниатюры:
Нажмите на изображение для увеличения
Название: close_logic_GBPUSDproM30_1.png
Просмотров: 22
Размер:	52.3 Кб
ID:	189819   Нажмите на изображение для увеличения
Название: close_logic_GBPUSDproM30_2.png
Просмотров: 17
Размер:	51.1 Кб
ID:	189820  

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Музыка веков в звуках рояля - https://soundcloud.com/yura-vakulenko

Последний раз редактировалось Yura Vakulenko; 29.12.2014 в 05:03.
Yura Vakulenko вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 29.12.2014, 06:09   #3348 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,529
Репутация: 3649
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,118
Поблагодарили 3,653 раз(а) в 1,472 сообщениях
Поинты: 2007
Юрий, а зачем смешивать правила написания кода старого формата и нового?
Почему инициализация наисана по-новому int OnInit() и по старому int start() почему не void OnTick()

Потом, научись писать алгоритм получается примерно так:
void OnTick()
{
// объявить переменные

// получить значения индикатора

// поставить условие на покупку
if()
{
// если условие выполнено вызвать функцию открытия ордера Buy
// и вызвать функцию закрытия ордера Sell (при этом не забыть проверить его наличие)
}
/////// то-же самое для продажи.
}
И не надо никаких лишних bool переменных.
Если что-то не работает, то поставить Print("Работает"); Если в журнале увидел такую распечатку, значит переносишь этот принт в другой блок кода. Таким образом находишь какой блок не работает.
Когда этот кусок кода будет отлажен, тогда можно будет дописать алгоритм ММ, реверсом и прочими плюшками. А так получается, что советник не открывает ордер, но уже присутствует возможность реверсивной работы. Соответственно усложняет работу с кодом.

В одном из сообщений Abi высказал и моё мнение, подсказывать написанием куска кода не в моих правилах.

Последний раз редактировалось AlexeyVik; 29.12.2014 в 06:15.
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 29.12.2014, 06:27   #3349 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,529
Репутация: 3649
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,118
Поблагодарили 3,653 раз(а) в 1,472 сообщениях
Поинты: 2007
Вот что ещё заметил, хотя это в проверочном варианте.

bufBuy = iCustom(NULL,0,"Arrows",SmoothPeriod,0,1);
bufBuy2 = iCustom(NULL,0,"Arrows",SmoothPeriod,0,2);
bufSell = iCustom(NULL,0,"Arrows",SmoothPeriod,1,1);
bufSell2 = iCustom(NULL,0,"Arrows",SmoothPeriod,0,2);

С такой ошибкой вряд-ли можно получить правильную работу советника.

Твой индикатор сколько имеет буферов?
Покажи вот такой скрин
Миниатюры:
Нажмите на изображение для увеличения
Название: 00.png
Просмотров: 11
Размер:	41.6 Кб
ID:	189825  
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 29.12.2014, 07:07   #3350 (permalink)
Почётный гражданин
 
Аватар для matro3
 
Регистрация: 18.07.2013
Сообщений: 349
Репутация: 344
matro3 matro3 matro3 matro3
Сказал(а) спасибо: 25
Поблагодарили 340 раз(а) в 143 сообщениях
Поинты: 160
А лучше нажми Ctrl + D и заскринь на свече с сигналом
matro3 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 29.12.2014, 13:34   #3351 (permalink)
 
Аватар для volodymyr67
 
Регистрация: 23.11.2011
Адрес: Львов
Сообщений: 1,396
Репутация: 2258
volodymyr67 volodymyr67 volodymyr67 volodymyr67 volodymyr67 volodymyr67 volodymyr67 volodymyr67 volodymyr67 volodymyr67 volodymyr67
Сказал(а) спасибо: 1,646
Поблагодарили 2,257 раз(а) в 803 сообщениях
Поинты: 10
Отправить сообщение для volodymyr67 с помощью Skype™
Сообщение от Yura Vakulenko Посмотреть сообщение
Владимир, в данном случае - открытый код не нужен! Достоточно компилированного! (индикатор не нужно встраивать в советник в виде его исходного кода.) Индикатор будет использоватся - как компилированный отдельный файл. там проще простого! Просто у меня навыки не такие профессиональные как у вас.

Доступ к идикатору будет через ICustom . 2 буфера. 0 - стрелка покупки. 1-Стрелка Продажи

Установите на график и все увидите. Мне только нужно чтобы по Открытому бару торговал! И открывал(закрывал) против. сделки по появлению стрелки. Макс. кол-во ордеров в рынке - 1. СЛ И ТП 0. Лот - фиксированный.

Я и так дал все, что нужно. Открытого кода у меня нету. Тут все просто! но, тем не менее, мне нужна помощь.. не выходит чего-то у меня)

Спасибо! Есть желание и возможность - помогите)
Юрий !
Я сам делетант просто у меня есть готовый советник где можно прописать буфер индюка , вот и всё
но для этого нужно открытый код

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
С уважением Владимир!
http://forexsystems.ru/poleznye-dlya...tml#post467397

ГДЕ ЕСТЬ ЗАКОН - ТАМ НЕТ СВОБОДЫ
volodymyr67 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 29.12.2014, 15:13   #3352 (permalink)
Активный участник
 
Аватар для Yura Vakulenko
 
Регистрация: 04.12.2013
Адрес: Швейцария, Cham
Сообщений: 129
Репутация: 77
Yura Vakulenko
Сказал(а) спасибо: 62
Поблагодарили 76 раз(а) в 39 сообщениях
Поинты: 172
Сообщение от AlexeyVik Посмотреть сообщение
Юрий, а зачем смешивать правила написания кода старого формата и нового?
bool переменные я тсвил не для проверки работоспособности, а для проверки прибыльности от разного типа торговых операций. И возможной оптимизации.

Я не совсем хорошо разбираюсь в синтаксисе нового и старого мкл 4. поэтому в коде и встретились новый и старый тип объявления. Я не знаю, где найти руководство по новому языку мкл 4. В справке терминала у меня старый тип языка. Когда-то все делали ошибки.

Насчет условий открытия ордеров - я уже разобрался. у меня все работает. Были не верные условия их открытия.

Индикатор имеет 6 буферов. 0-1-2-3-4-5

Спасибо за помощь!

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Музыка веков в звуках рояля - https://soundcloud.com/yura-vakulenko

Последний раз редактировалось Yura Vakulenko; 29.12.2014 в 15:15.
Yura Vakulenko вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 29.12.2014, 18:30   #3353 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,529
Репутация: 3649
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,118
Поблагодарили 3,653 раз(а) в 1,472 сообщениях
Поинты: 2007
Сообщение от Yura Vakulenko Посмотреть сообщение
bool переменные я тсвил не для проверки работоспособности, а для проверки прибыльности от разного типа торговых операций. И возможной оптимизации.

Я не совсем хорошо разбираюсь в синтаксисе нового и старого мкл 4. поэтому в коде и встретились новый и старый тип объявления. Я не знаю, где найти руководство по новому языку мкл 4. В справке терминала у меня старый тип языка. Когда-то все делали ошибки.

Насчет условий открытия ордеров - я уже разобрался. у меня все работает. Были не верные условия их открытия.

Индикатор имеет 6 буферов. 0-1-2-3-4-5

Спасибо за помощь!
А как ты начинаешь создавать советник? Берёшь что было, переименовываешь и поехали? Отсюда видимо и встретились...
Чтобы увидеть справку (документацию) по языку встань на любое ключевое слово и нажми F1 и всё. Или посмотри здесь _http://docs.mql4.com/ru
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 29.12.2014, 19:23   #3354 (permalink)
Активный участник
 
Аватар для Yura Vakulenko
 
Регистрация: 04.12.2013
Адрес: Швейцария, Cham
Сообщений: 129
Репутация: 77
Yura Vakulenko
Сказал(а) спасибо: 62
Поблагодарили 76 раз(а) в 39 сообщениях
Поинты: 172
Сообщение от AlexeyVik Посмотреть сообщение
А как ты начинаешь создавать советник? Берёшь что было, переименовываешь и поехали? Отсюда видимо и встретились...
Чтобы увидеть справку (документацию) по языку встань на любое ключевое слово и нажми F1 и всё. Или посмотри здесь _http://docs.mql4.com/ru
ну да. примерно так и вышло) открыл подобный советник и начал туда свой код впихивать)) это не важно сейчас.. сейчас важно сделать условия закрытия по описанномму выше алгоритму.. вы можете помочь?

и почему у меня в тестере стратегий в двух разных терминалах при одних и тех же натройках советник.. по разному открывает ордера по показаниям моего платного индикатора. В терминале Альпари - сделки открываются и закрываются некорректно (все настройки идентичны и на графике индикатор выглядит рабочим.. ) А в терминале Форекс Ком - в тестере стратегий - все впорядке. Индикатор активировался и первый раз устанавливался именно в терминал Форекс. ком. В терминал Альпари - индикатор перенесен из первого терминала.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Музыка веков в звуках рояля - https://soundcloud.com/yura-vakulenko

Последний раз редактировалось Yura Vakulenko; 29.12.2014 в 19:30.
Yura Vakulenko вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 29.12.2014, 19:42   #3355 (permalink)
Abi
Элитный участник
 
Аватар для Abi
 
Регистрация: 21.12.2010
Адрес: Kz Казахстан
Сообщений: 970
Репутация: 1695
Abi Abi Abi Abi Abi Abi Abi Abi Abi Abi Abi
Сказал(а) спасибо: 552
Поблагодарили 1,693 раз(а) в 559 сообщениях
Поинты: 551
Сообщение от Yura Vakulenko Посмотреть сообщение
и почему у меня в тестере стратегий в двух разных терминалах при одних и тех же натройках советник.. по разному открывает ордера по показаниям моего платного индикатора.
возможно из-за разного серверного времени или еще каких настроек терминала.
Трудно гадать без самого индюка и того что и как он использует...
Abi вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 29.12.2014, 20:06   #3356 (permalink)
Активный участник
 
Аватар для Yura Vakulenko
 
Регистрация: 04.12.2013
Адрес: Швейцария, Cham
Сообщений: 129
Репутация: 77
Yura Vakulenko
Сказал(а) спасибо: 62
Поблагодарили 76 раз(а) в 39 сообщениях
Поинты: 172
сколько буду стоить ответы на мои вопросы, что касаются торгового алгоритма советника? столько всего уже было написано... и потеряно времени...

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Музыка веков в звуках рояля - https://soundcloud.com/yura-vakulenko
Yura Vakulenko вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 30.12.2014, 06:55   #3357 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,529
Репутация: 3649
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,118
Поблагодарили 3,653 раз(а) в 1,472 сообщениях
Поинты: 2007
Сообщение от Yura Vakulenko Посмотреть сообщение
сколько буду стоить ответы на мои вопросы, что касаются торгового алгоритма советника? столько всего уже было написано... и потеряно времени...
Юрий, вопрос не в цене а в свободном времени (не торчать-же на форуме ради желания помочь тебе) и твоём желании делать так как тебе советуют.
Я тебе советовал начать с начала, а ты без уверенности нормальной работы первой части кода (открытие сделок) пишешь всё вместе и вопросы получаются скачущими. То не открывает, то на разных терминалах по разному работает, то не закрывает...
Но всё-же попытаюсь ответить на один из вопросов:
По разному открываются ордера потому, что отличаются показания индикатора. Показания индикатора отличаются потому, что разные OHLC у разных брокеров. А если индикатор использует объёмы, то вообще туши свет...

И ещё я не знаю как привязывается продукт из маркета. Может к терминалу?
Ты делаешь какую-то тайну из индикатора... а зачем? Давно дал-бы ссылку на него, там должна быть возможность скачать тестовый вариант и тогда мог-бы быть более конкретный разговор.

Последний раз редактировалось AlexeyVik; 30.12.2014 в 06:59.
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 30.12.2014, 06:56   #3358 (permalink)
Почётный гражданин
 
Аватар для matro3
 
Регистрация: 18.07.2013
Сообщений: 349
Репутация: 344
matro3 matro3 matro3 matro3
Сказал(а) спасибо: 25
Поблагодарили 340 раз(а) в 143 сообщениях
Поинты: 160

Скрытый текст

Сообщение от Yura Vakulenko Посмотреть сообщение
подскажите, как мне изменить код советника, чтобы была соблюдена следующая логика закрытия позиций. Для большей наглядности - я все изобразил на картинках.

Позиция закрывается полностью (100% объема) по противоположному сигналу (Большая КРАСНАЯ \ СИНЯЯ стрелки) и позиция закрывается частично по дополнительным сигналам (Маленькие желтые\синие стрелки). Все стрелки формируются на 1-м баре. И советник работает только по открытию бара.

т.е. Основной сигнал на закрытие позиции (и открытие противоположной) - это БОЛЬШИЕ СТРЕЛКИ

Дополнительный сигнал на закрытие Основной позиции - это маленькие стрелки. (Желтая малая стрелка - закрытие продаж. Синяя малая стрелка - закрытие покупок.)

Логика закрытия:

за начальную точку отсчета берется время открытия основной позиции. Одновременно в рынке может быть открыта 1 основная позиция ( по ОСНОВНОМУ СИГНАЛУ - БОЛЬШИЕ СТРЕЛКИ)

Малые стрелки, чтобы использовать их в роли доп. сигнала на закрытие - должны появится только после открытия основной позиции.

появилась 1-я малая стрелка - закрываем 25 % основной позиции. (при условии, что цена открытия нового бара, после появления малой стрелки больше\меньше внешней переменной N ). Если условие верно, тогда закрываем 25% основной позиции. Если не верно - тогда закрываем 0% основной позиции. На данном этапе закрыто или 0% или 25% основной позиции.

появилась 2-я малая стрелка - закрываем еще 25% основной позиции. (при условии, что на первой стрелке уже было закрытие 25 % основной позиции. если же такого закрытия не было, тогда закрываем 50% основной позиции.) На данном этапе закрыто или 50% основной позиции.

появилась 3-я малая стрелка - закрываем еще 25% основной позиции.
На данном этапе закрыто или 75% основной позиции.

появилась 4-я малая стрелка - закрываем еще 25% основной позиции. На данном этапе закрыто 100% основной позиции. Т.е. ордер закрыт. 4-я стрелка появляется крайне редко! в основном их только 3. и оставшиеся 25% позиции, после первых 3-х стрелок закрываются по основному противоположному сигналу.

если же не появилось ни одной из малых стрелок, тогда позиция закрывается на 100% по против. основному сигналу.

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

Условие появления доп. стрелок - я смогу составить и сам.. но, я, к сожалению, не смогу вам скинуть индикатор, который их рисует, все по той же причине - он привязан к моему ПК и счету и на другом ПК и счете работать не будет..

Помогите встроить такую функцию в код советника.

а вот текущий код советника..

Код СОВЕТНИКА


//+------------------------------------------------------------------+
//| indicator_test.mq4 |
//| |
//| |
//+------------------------------------------------------------------+
#property copyright ""
#property link ""
//--------------------------------------------------------------------
extern int SmoothPeriod = 5,
SmoothMethod = 1,
Notify = 0;
extern double stoploss = 0,
takeprofit = 0,
TrailingStop = 0;
extern double LOT = 0.1;
extern bool Close_on_Oposite = true;
extern bool Buy_allow = true;
extern bool Sell_allow = true;
extern bool mode_reverse = false;
//--------------------------------------------------------------------
int STOPLEVEL,Magic=1234567890;
//int redOrblueFlag=7;

//--------------------------------------------------------------------

int OnInit()
{

return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason) { }


int start()
{
int timeprev=0;
if (timeprev == Time[0]) return (0);
timeprev = Time[0];
//if (!NewBar()) return;
STOPLEVEL=MarketInfo(Symbol(),MODE_STOPLEVEL);
if (TrailingStop>=STOPLEVEL) TrailingStop();
//if (TimeBar==Time[0]) return(0);
double bufBuy, bufBuy2,bufSell,bufSell2;

//bufBuy = iCustom(NULL,0,"Arrows",SmoothPeriod,0,1);
//bufSell = iCustom(NULL,0,"Arrows",SmoothPeriod,1,1);

bufBuy = iCustom(NULL,0,"Market\\evolution",SmoothPeriod,SmoothMethod,Notify,0,1);
bufBuy2 = iCustom(NULL,0,"Market\\evolution",SmoothPeriod,SmoothMethod,Notify,0,2);
bufSell = iCustom(NULL,0,"Market\\evolution",SmoothPeriod,SmoothMethod,Notify,1,1);
bufSell2 = iCustom(NULL,0,"Market\\evolution",SmoothPeriod,SmoothMethod,Notify,1,2);

double SL,TP;
if (Buy_allow)
{
if (bufBuy==bufSell && bufSell2 !=0 && bufBuy2 == 0)//if (bufBuy != 0 && bufSell == 0 )//
{
if (!mode_reverse)
{
if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP = 0;
if (stoploss!=0) SL = NormalizeDouble(Bid - stoploss*Point,Digits); else SL = 0;
if (Close_on_Oposite) CLOSEORDER(OP_SELL);
int tik_buy = OrderSend(Symbol(),OP_BUY,LOT,NormalizeDouble(Ask,Digits),2,SL,TP,"Ind check buy",Magic,0,clrBlue);
if(tik_buy>0)
{
if(OrderSelect(tik_buy,SELECT_BY_TICKET,MODE_TRADES))
Print("BUY order #",tik_buy," opened : ",NormalizeDouble(OrderOpenPrice(),Digits));
}
else
Print("Error opening BUY order #",tik_buy," : ",GetLastError());
}

else

{
if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); else TP = 0;
if (stoploss!=0) SL = NormalizeDouble(Ask + stoploss*Point,Digits); else SL = 0;
if (Close_on_Oposite) CLOSEORDER(OP_BUY);
int tik_sell_on_reverse_buy = OrderSend(Symbol(),OP_SELL,LOT,NormalizeDouble(Bid,Digits),2,SL,TP,"Ind check sell",Magic,0,clrRed);
if(tik_sell_on_reverse_buy>0)
{
if(OrderSelect(tik_sell_on_reverse_buy,SELECT_BY_TICKET,MODE_TRADES))
Print("SELL order #",tik_sell_on_reverse_buy," opened : ",NormalizeDouble(OrderOpenPrice(),Digits));
}
else
Print("Error opening SELL order #",tik_sell_on_reverse_buy," : ",GetLastError());

}

}
}

if (Sell_allow)
{
if (bufBuy==bufSell && bufSell2 ==0 && bufBuy2 != 0)//if (bufSell != 0 && bufBuy == 0)//
{
if (!mode_reverse)
{

if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); else TP = 0;
if (stoploss!=0) SL = NormalizeDouble(Ask + stoploss*Point,Digits); else SL = 0;
if (Close_on_Oposite) CLOSEORDER(OP_BUY);
int tik_sell = OrderSend(Symbol(),OP_SELL,LOT,NormalizeDouble(Bid,Digits),2,SL,TP,"Ind check sell",Magic,0,clrRed);
if(tik_sell>0)
{
if(OrderSelect(tik_sell,SELECT_BY_TICKET,MODE_TRADES))
Print("SELL order #",tik_sell," opened : ",NormalizeDouble(OrderOpenPrice(),Digits));
}
else
Print("Error opening SELL order #",tik_sell," : ",GetLastError());

}

else

{
if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP = 0;
if (stoploss!=0) SL = NormalizeDouble(Bid - stoploss*Point,Digits); else SL = 0;
if (Close_on_Oposite) CLOSEORDER(OP_SELL);
int tik_buy_on_reverse_sell = OrderSend(Symbol(),OP_BUY,LOT,NormalizeDouble(Ask,Digits),2,SL,TP,"Ind check buy",Magic,0,clrBlue);
if(tik_buy_on_reverse_sell>0)
{
if(OrderSelect(tik_buy_on_reverse_sell,SELECT_BY_TICKET,MODE_TRADES))
Print("BUY order #",tik_buy_on_reverse_sell," opened : ",NormalizeDouble(OrderOpenPrice(),Digits));
}
else
Print("Error opening BUY order #",tik_buy_on_reverse_sell," : ",GetLastError());

}
}
}

return (0);
}
//--------------------------------------------------------------------
void CLOSEORDER(int ord)
{
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if (OrderType()==OP_BUY && ord==OP_BUY)
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),3,CLR_NONE);
if (OrderType()==OP_SELL && ord==OP_SELL)
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),3,CLR_NONE);
}
}
}
}
//--------------------------------------------------------------------
void TrailingStop()
{
int tip,Ticket;
double StLo,OSL,OOP;
for (int i=0; i<OrdersTotal(); i++)
{ if (OrderSelect(i, SELECT_BY_POS)==true)
{ tip = OrderType();
if (tip<2 && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
OSL = NormalizeDouble(OrderStopLoss(),Digits);
OOP = NormalizeDouble(OrderOpenPrice(),Digits);
Ticket = OrderTicket();
if (tip==OP_BUY)
{
StLo = NormalizeDouble(Bid-TrailingStop*Point,Digits);
if (StLo > OSL && StLo > OOP)
{ if (!OrderModify(Ticket,OOP,StLo,OrderTakeProfit(),0,White))
Print("TrailingStop Error ",GetLastError()," buy SL ",OSL,"->",StLo);
}
}
if (tip==OP_SELL)
{
StLo = NormalizeDouble(Ask+TrailingStop*Point,Digits);
if (StLo > OOP || StLo==0) continue;
if (StLo < OSL || OSL==0 )
{ if (!OrderModify(Ticket,OOP,StLo,OrderTakeProfit(),0,White))
Print("TrailingStop Error ",GetLastError()," sell SL ",OSL,"->",StLo);
}
}
}
}
}

}

//--------------------------------------------------------------------

bool NewBar()
{
static datetime new_Bar;
if (new_Bar == Time[1]) return(false); //Если бар не закрыт - выход
new_Bar = Time[1];
return(true);
}
[свернуть]


Смотрите рисунки ниже.
[свернуть]


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

Кроме того Ваш код не удобно читать ))

Вот кусок Вашего кода:

Скрытый текст

Код:
if (Buy_allow)
{
   if (bufBuy==bufSell && bufSell2 !=0 && bufBuy2 == 0)
   {
      if (!mode_reverse)
      {
         if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP = 0;
         if (stoploss!=0) SL = NormalizeDouble(Bid - stoploss*Point,Digits); else SL = 0;
         if (Close_on_Oposite) CLOSEORDER(OP_SELL);
         int tik_buy = OrderSend(Symbol(),OP_BUY,LOT,NormalizeDouble(Ask,Digits),2,SL,TP,"Ind check buy",Magic,0,clrBlue);
         if(tik_buy>0)
         {
            if(OrderSelect(tik_buy,SELECT_BY_TICKET,MODE_TRADES))
            Print("BUY order #",tik_buy," opened : ",NormalizeDouble(OrderOpenPrice(),Digits));
         }
         else
         Print("Error opening BUY order #",tik_buy," : ",GetLastError());
      }
      else
      {
         if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); else TP = 0;
         if (stoploss!=0) SL = NormalizeDouble(Ask + stoploss*Point,Digits); else SL = 0;
         if (Close_on_Oposite) CLOSEORDER(OP_BUY);
         int tik_sell_on_reverse_buy = OrderSend(Symbol(),OP_SELL,LOT,NormalizeDouble(Bid,Digits),2,SL,TP,"Ind check sell",Magic,0,clrRed);
         if(tik_sell_on_reverse_buy>0)
         {
            if(OrderSelect(tik_sell_on_reverse_buy,SELECT_BY_TICKET,MODE_TRADES))
            Print("SELL order #",tik_sell_on_reverse_buy," opened : ",NormalizeDouble(OrderOpenPrice(),Digits));
         }
         else
         Print("Error opening SELL order #",tik_sell_on_reverse_buy," : ",GetLastError());
      }
   }
}
[свернуть]

Понимаю так: Сигнал в BUY
если не включен реверс - покупаем
если включен - продаем
Но сигнал-то BUY. Не совсем понял эту конструкцию.

Еще у Вас две переменные, по сути означающие одно и то же: mode_reverse и Close_on_Oposite.
Если включен реверс, то позицию надо закрывать без необходимости проверки Close_on_Oposite.
Ваша стратегия, как я понял, не позволяет держать больше одной позиции, а это значит что одну из этих переменных надо удалить за ненадобностью.
Значит, если реверс выключен, то продолжаем держать позицию и игнорируем все сигналы в противоход.
Резюме: Close_on_Oposite - удаляем.

Далее. Не плохо бы привести код в примерно такой вид:

Скрытый текст

Код:
//--- Торговые константы
#define        ENTER_NONE              0
#define        ENTER_SELL_BIG          1
#define        ENTER_BUY_BIG           2
#define        ENTER_SELL_SMALL        3
#define        ENTER_BUY_SMALL         4

#define        POS_SELL                5
#define        POS_BUY                 6

#define        PART                    6
#define        ALL                     6

void OnTick()
  {
//---
   // Ищем сигнал для входа
   int nResult = SearchEnter();
   // Если позиции нет
   if(!pos.exist)
      // Если есть сигнал - отправляем его в блок торговых сделок
      if(nResult != ENTER_NONE) TradingBlock(nResult);
   // Если позиция есть
   else
   {
      // Позиция BUY
      if(pos.type == POS_BUY)
      {
         // Закрыть полностью
         if(nResult == ENTER_SELL_BIG) ClosePos(ALL);
         // Закрыть часть
         if(nResult == ENTER_SELL_SMALL) ClosePos(PART);
      }
      // Позиция SELL
      if(pos.type == POS_SELL)
      {
         // Закрыть полностью
         if(nResult == ENTER_BUY_BIG) ClosePos(ALL);
         // Закрыть часть
         if(nResult == ENTER_BUY_SMALL) ClosePos(PART);
      }
   }
   
  }
//+------------------------------------------------------------------+
int SearchEnter()
{
   int nResult = ENTER_NONE;
   
   return(nResult);
}
[свернуть]

Проще вникать в него другим и самому приятней ))
Хотя это дело вкуса.
matro3 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 30.12.2014, 14:33   #3359 (permalink)
Интересующийся
 
Аватар для Alexz2107
 
Регистрация: 05.05.2011
Сообщений: 16
Репутация: 2
Alexz2107
Сказал(а) спасибо: 10
Поблагодарили 1 раз в 1 сообщении
Поинты: 20

Плохо Возврат ;


Поздравляю всех с наступающим НГ! Подскажите, пожалуйста, ответ на глупый вопрос! В моей системе используются некоторые компоненты сторонних разработчиков и во многих местах в них используется return (0); вместо простого return; хотя тип этих скриптов void и по факту в работе никакие данные они не возвращают, просто выполняют действия. И вот в чем вопрос - это сделано вследствие неграмотности или есть какие-то подводные камни в языке, из-за чего и используется некорректный возврат?
Alexz2107 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 30.12.2014, 14:42   #3360 (permalink)
Почётный гражданин
 
Аватар для matro3
 
Регистрация: 18.07.2013
Сообщений: 349
Репутация: 344
matro3 matro3 matro3 matro3
Сказал(а) спасибо: 25
Поблагодарили 340 раз(а) в 143 сообщениях
Поинты: 160
Оператор возврата return
Цитата:
В функциях с типом возвращаемого значения void необходимо использовать оператор return без выражения:
Код:
void SomeFunction()
  {
   Print("Hello!");
   return;    // этот оператор можно удалить
  }
matro3 вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Alexz2107 (30.12.2014)
Ответ

Метки
mql4, mql4 помощь, вопросы mql4


Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.



Текущее время: 07:57. Часовой пояс GMT.


Перевод: zCarot
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd.
SEO by vBSEO