Tema97: Подскажите пожалуйста как сделать чтоб покупало 1 раз и после тейк профит не чего не делало - а ждало нового пробития (код записан так - if (cena>ma && cena> ma2 && cena> Ma && cena>Ma1) ???
Проверяйте тип последней закрытой позиции, если был buy то не открывать ещё раз buy, а ждать сигнал sell и наоборот.
Функция GetTypeLastClosePos().
Эта функция возвращает тип последней закрытой позиции или -1. Более точный отбор учитываемых позиций задаётся внешними параметрами:
sy - Наименование рыночного инструмента. Если задать этот параметр, то функция учтёт позиции только заданного инструмента. Значение по умолчанию - "" означает любой рыночный инструмент. NULL означает текущий инструмент.
mn - Идентификатор позиции, MagicNumber. Значение по умолчанию -1 означает любой идентификатор.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание : Возвращает тип последней закрытой позиции или -1 |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+int GetTypeLastClosePos(string sy="", int mn=-1) {
datetime t=0;
int i, k=OrdersHistoryTotal(), r=-1;
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (t<OrderCloseTime()) {
t=OrderCloseTime();
r=OrderType();
}
}
}
}
}
return(r);
}
Tema97: а почему именно аск а не бид или это не принципиально ???
Аск это верхняя цена , бид нижняя все что между спред. . для покупки ориентируйте на бид индикаров , для продажи наоборот . этотчто бы советник по индикароку работал с учётом спреда
у меня продолжение вопроса есть --- как сделать чтоб например в деопозоне 100-200 пунктов от линии покупало у меня только код на ровно 100 есть if(Ask ==("линия"+100*Point)) ) например между 100 и 300 пунктами ) а может быть такое что например по достижению 100 пунктов не покупает мол рынок быстро дернулся и тд -( при сильно движение (например (Non Farm ) - ) лично у меня не один раз была сильная задержка перед закрытием сделки или стоп лос когда перетаскивал)
у меня продолжение вопроса есть --- как сделать чтоб например в деопозоне 100-200 пунктов от линии покупало у меня только код на ровно 100 есть if(Ask ==("линия"+100*Point)) ) например между 100 и 300 пунктами ) а может быть такое что например по достижению 100 пунктов не покупает мол рынок быстро дернулся и тд -( при сильно движение (например (Non Farm ) - ) лично у меня не один раз была сильная задержка перед закрытием сделки или стоп лос когда перетаскивал)
Господа программисты.В чем косяк???Привязал наконец то мартингейла.Посреди дня советника в таком виде подключил(уже прошло несколько сделок этого же советника,но в недоделанном до этого состояния виде),-советник работал нормально,мартингейл работал,вывел убытки за полдня в плюс.На следующий день с утра включил терминал,ушел на работу,вечером-ни одной сделки.Мартингейл увеличивает лот при убыточной сделке,в остальных случаях-стандартный лот.Или я что-то не понимаю???
voidOnTick()
{
datetime EaStartTime = StringToTime(StartTime); // время начала работы советникаdatetime EaEndTime = StringToTime(EndTime); // время окончания работы советникаdatetime CurrTime = TimeCurrent(); // это если нужно взять время терминалаif(CurrTime<EaStartTime || CurrTime>=EaEndTime)
return; // если еще не время торговать - выход
{
MacdCurrent=iMACD(NULL,0,InpFastEMA,InpSlowEMA,InpSignalSMA,Macd_Applied_Price,MODE_MAIN,0);
SignalCurrent=iMACD(NULL,0,InpFastEMA,InpSlowEMA,InpSignalSMA,Macd_Applied_Price,MODE_SIGNAL,0);
SignalMAPrevious=iMA(NULL,0,InpMAPeriod,InpMAShift,InpMAMethod,MA_Applied_Price,1);
SignalMAThis=iMA(NULL,0,InpMAPeriod,InpMAShift,InpMAMethod,MA_Applied_Price,0);
SignalParabolic=iSAR(NULL,0,InpSARStep,InpSARMaximum,0);
SignalStochastic_5=iStochastic(NULL,5,InpKPeriod,InpDPeriod,InpSlowing,MODE_SMA,0,1,0);
MainStochastic_5=iStochastic(NULL,5,InpKPeriod,InpDPeriod,InpSlowing,MODE_SMA,0,0,0);
SignalStochastic=iStochastic(NULL,0,InpKPeriod,InpDPeriod,InpSlowing,MODE_SMA,0,1,0);
MainStochastic=iStochastic(NULL,0,InpKPeriod,InpDPeriod,InpSlowing,MODE_SMA,0,0,0);
SignalCCIPrevious=iCCI(NULL,0,InpCCIPeriod,0,1);
SignalCCIThis=iCCI(NULL,0,InpCCIPeriod,0,0);
if(CountTrades()==0) CheckForOpen();
}
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+void CheckForOpen()
{if(ModLots())
{
//-----Ставим ордер на покупку.if(SignalCurrent<MacdCurrent && SignalMAPrevious<SignalMAThis &&
Ask>SignalParabolic && SignalStochastic_5<MainStochastic_5&&SignalStochastic<MainStochastic&&
SignalCCIPrevious<SignalCCIThis)
{
ticket=OrderSend(NULL,OP_BUY,lot,Ask,slippage,0,0,exptime,magic,0,Blue);
if(ticket>0)
return;
}
//-----Ставим ордер на продажу.if(SignalCurrent>MacdCurrent && SignalMAPrevious>SignalMAThis &&
Bid<SignalParabolic && SignalStochastic_5>MainStochastic_5&&SignalStochastic>MainStochastic&&
SignalCCIPrevious>SignalCCIThis)
{
ticket=OrderSend(NULL,OP_SELL,lot,Bid,slippage,0,0,exptime,magic,0,Red);
if(ticket>0)
return;
}
}
}
//+------------------------------------------------------------------+int CountTrades()
{
int count=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic)
count++;
}
}
return(count);
}
//+------------------------------------------------------------------+bool ModLots()
{
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue;
if((OrderMagicNumber()==magic) && (OrderSymbol()==Symbol()))
{
if(OrderProfit()<0)
{lot=OrderLots()*LotMarti; break;}
else { lot=Lots; break;}
}
}
return(true);
}
//+------------------------------------------------------------------+
Здравствуйте. В справочнике mql4 сказано что обработка событий Timer и ChartEvent в тестере стратегий не поддерживается. Соответственно, кнопки (OBJ_BUTTON) не работают (точнее, ничего не происходит при нажатии). Но на триал версию этого эксперта это правило, почему-то, не распространяется. Подскажите пожалуйста, почему так происходит и как заставить работать кнопки в тестере?
Подскажите пожалуйста как сделать чтоб покупало 1 раз и после тейк профит не чего не делало - а ждало нового пробития (код записан так - if (cena>ma && cena> ma2 && cena> Ma && cena>Ma1) ???
Проверяйте тип последней закрытой позиции, если был buy то не открывать ещё раз buy, а ждать сигнал sell и наоборот.
Функция GetTypeLastClosePos().
Эта функция возвращает тип последней закрытой позиции или -1. Более точный отбор учитываемых позиций задаётся внешними параметрами:
if(Ask ==("линия"+100*Point))
покупаем
iMA- дынные индикатора МА
а почему именно аск а не бид или это не принципиально ???
Видимо хочет переиграть спред так как бай открывается по аск, но по бид будет более корректно условие.
а почему именно аск а не бид или это не принципиально ???
...для покупки ориентируйте на бид индикаров , для продажи наоборот . этотчто бы советник по индикароку работал с учётом спреда
Наверно, все таки, наоборот)
И... про какие "индикары" Вы говорите?))))
у меня продолжение вопроса есть --- как сделать чтоб например в деопозоне 100-200 пунктов от линии покупало у меня только код на ровно 100 есть if(Ask ==("линия"+100*Point)) ) например между 100 и 300 пунктами ) а может быть такое что например по достижению 100 пунктов не покупает мол рынок быстро дернулся и тд -( при сильно движение (например (Non Farm ) - ) лично у меня не один раз была сильная задержка перед закрытием сделки или стоп лос когда перетаскивал)
у меня продолжение вопроса есть --- как сделать чтоб например в деопозоне 100-200 пунктов от линии покупало у меня только код на ровно 100 есть if(Ask ==("линия"+100*Point)) ) например между 100 и 300 пунктами ) а может быть такое что например по достижению 100 пунктов не покупает мол рынок быстро дернулся и тд -( при сильно движение (например (Non Farm ) - ) лично у меня не один раз была сильная задержка перед закрытием сделки или стоп лос когда перетаскивал)