Чиркните ктонить скриптик за 5 wmz. - страница 14

 
Profitabl:

Вот этот код с четырьмя ошибками компелируется, может скобки где не хватает ?


Попробуйте так:

Ну, и соответственно Ф-ции NumberOfPositions и ClosePositions должны в коде присутствовать

extern double TakeProfit = 120;
extern double StopLoss = 120;
extern double Lots = 0.1;
int Magic = 1234567;
int ticket;

//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
if ( DayOfWeek()==4)//если сегодня четверг
   {
    if ( Hour() == 23) //если - 23 часа терминального времени
       {
        if ( NumberOfPositions(NULL,OP_BUY, Magic )==0 ) //если нет открытых бай-позиций
           { 
           //"если цена open 46 периода 30M четверга меньше цены open 46 периода 30M среды,"(с)
           //"а цена опен среды больше цены опен вторника" (с),
           //"да ещё цена опен вторника больше цены опен понедельника" (с),
           if ( Close[1]<= Open[24] && Close[23]>=Open[48] && Close[47]>=Open[72]) 
              {
               ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask+StopLoss*Point,3,0,Ask+TakeProfit*Point,"Name_Expert",16384,0,Green);
               if(ticket!=-1)
                  {Print("Error opening BUY order : ",GetLastError());
                   return(0);}
              }     

           }
           
        }
   }       

if ( DayOfWeek()==5 && Hour() == 23){//если сегодня пятница, 23-00
//закрываем
ClosePositions(NULL,OP_BUY, Magic); }

return(0);
}
// the end.

 

=================

Там были не 4 ошибки. Там были 4 неиспользованные функции. Убрал.

Повторюсь. Проверять на тф=н1 

extern int       Magic=5671;

extern double    lots = 0.1;
extern int       StopLoss=120;
extern int       TakeProfit=120;

extern string _________________ = "=== Прочие Параметры советника  ===";
extern int        Slippage        = 10; // Проскальзывание цены
extern string Name_Expert = "Обезьяна Чи-Чи-Чи продавала кирпичи";
extern bool   UseSound      = True;   // Использовать звуковой сигнал
color  clOpenBuy     = Blue;        // Цвет значка открытия покупки
color  clOpenSell    = Red;         // Цвет значка открытия продажи
 color  clCloseBuy    = Green;     // Цвет закрытия покупки
 color  clCloseSell   = Green;    // Цвет закрытия продажи
extern int    NumberOfTry   = 10;           // Количество попыток
 string SoundSuccess  = "ok.wav";          // Звук успеха
 string SoundError    = "timeout.wav";    // Звук ошибки

//----------------------------------
double SL,TP;
int ticket;
static int prevtime = 0;
int StopLevel;

//-- Подключаемые модули --

#include <stderror.mqh>
#include <stdlib.mqh>

//+------------------------------------------------------------------+

int start()
  {
// задаем работу по ЦЕНАМ ОТКРЫТИЯ 
if (Time[0] == prevtime) return(0); //если появился новый бар
   prevtime = Time[0]; // начинаем работу

StopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL); // вызываем разрешенный 
//минимаьный стоп-Уровень
//======================= открываем позиции =====================================
if ( DayOfWeek()==4){//если сегодня четверг
if ( Hour() == 23)  {//если - 23 часа терминального времени
if ( NumberOfPositions(NULL ,OP_BUY, Magic )==0 ) { //если  нет открытых бай-позиций 
//если цена open 46 периода 30M четверга меньше цены open 46 периода 30M среды,
//а цена опен среды больше цены опен вторника,
//да ещё цена опен вторника больше цены опен понедельника,
if ( Close[1]<= Open[24] && Close[23]>=Open[48] && Close[47]>=Open[72]) {
//покупаем 
      SL=0;TP=0;
      if(StopLoss>0 && StopLoss>StopLevel )    SL=Bid-Point*StopLoss;
      if(TakeProfit>0 && TakeProfit>StopLevel) TP=Bid+Point*TakeProfit;
      if(StopLoss  <StopLevel && StopLoss>0)   SL = Bid-Point*StopLevel; 
      if(TakeProfit<StopLevel && TakeProfit>0) TP = Bid+Point*StopLevel; 
   ticket=OrderSend(Symbol(),OP_BUY,lots,Ask,3,SL,TP,"Name_Expert",Magic,0,clOpenBuy );
   if(ticket < 0) {
            Print("Ошибка открытия ордера BUY #", GetLastError()); 
            Sleep(10000);  prevtime = Time[1];   return (0); 
                  } 
        }}}}
//================== конец блока открытия ==================================
 //================Закрытие позиций=====================================
if ( DayOfWeek()==5  && Hour() == 23){//если сегодня пятница, 23-00
//закрываем
 ClosePositions(NULL,OP_BUY, Magic); }            
                  
//================== Конец блока закрытия  =============================
  return(0);
  }
//ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ Конец функции int start() ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ 
 
 //ЖЖЖЖЖЖЖЖЖЖЖ ПОЛЬЗОВАТЕЛЬСКИК ФУНКЦИИ ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ

//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Возвращает наименование торговой операции                      |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    op - идентификатор торговой операции                                    |
//+----------------------------------------------------------------------------+
string GetNameOP(int op) {
  switch (op) {
    case OP_BUY      : return("Buy");
    case OP_SELL     : return("Sell");
    case OP_BUYLIMIT : return("BuyLimit");
    case OP_SELLLIMIT: return("SellLimit");
    case OP_BUYSTOP  : return("BuyStop");
    case OP_SELLSTOP : return("SellStop");
    default          : return("Unknown Operation");
  }
}
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия  : 19.02.2008                                                      |
//|  Описание: Закрытие одной предварительно выбранной позиции                 |
//+----------------------------------------------------------------------------+
void ClosePosBySelect() {
  bool   fc;
  color  clClose;
  double ll, pa, pb, pp;
  int    err, it;

  if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
    for (it=1; it<=NumberOfTry; it++) {
      if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
      while (!IsTradeAllowed()) Sleep(5000);
      RefreshRates();
      pa=MarketInfo(OrderSymbol(), MODE_ASK);
      pb=MarketInfo(OrderSymbol(), MODE_BID);
      if (OrderType()==OP_BUY) {
        pp=pb; clClose=clCloseBuy;
      } else {
        pp=pa; clClose=clCloseSell;
      }
      ll=OrderLots();
      fc=OrderClose(OrderTicket(), ll, pp, Slippage, clClose);
      if (fc) {
        if (UseSound) PlaySound(SoundSuccess); break;
      } else {
        err=GetLastError();
        if (UseSound) PlaySound(SoundError);
        if (err==146) while (IsTradeContextBusy()) Sleep(1000*11);
        Print("Error(",err,") Close ",GetNameOP(OrderType())," ",
              ErrorDescription(err),", try ",it);
        Print(OrderTicket(),"  Ask=",pa,"  Bid=",pb,"  pp=",pp);
        Print("sy=",OrderSymbol(),"  ll=",ll,"  sl=",OrderStopLoss(),
              "  tp=",OrderTakeProfit(),"  mn=",OrderMagicNumber());
        Sleep(1000*5);
      }
    }
  } else Print("Некорректная торговая операция. Close ",GetNameOP(OrderType()));
}
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru/                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Закрытие позиций по рыночной цене                              |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
void ClosePositions(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=k-1; i>=0; i--) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) ClosePosBySelect();
        } } } } }

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает количество позиций.                                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int NumberOfPositions(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), kp=0;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) kp++;
          }}}}}  return(kp);}

 
leonid553:

=================

Там были не 4 ошибки. Там были 4 неиспользованные функции. Убрал.

Повторюсь. Проверять на тф=н1


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

Единственно, что не получается, так это чтобы и SELL позиции закрывались по пятницам в 23:00, а то только BUY закрываются, а SELL модифицируются по три-четыре дня и конечно s\l закрываются.

Вот эти данные евро и фунта могут учитываться как дополнительные условия ?, просто когда прогнозы не ассиметричные В=ВВ или Н=НН надо покупать в противоположную сторону, это гораздо улучьшает результат.

Но если такие же данные фунта и евро в это время
EUR"втр нисходящий, срд нисходящий, чтв нисходящий"
GBP"втр восходящий, срд восходящий, чтв нисходящий"
то открыть не "SELL", а "BUY"

Кстати о прибыльности, если удалить неточные прогнозы, то только 70 сделок шести прогнозов пятницы дают примерно 1500 писпов. Это можно умножить в пять раз остальных дней, и увеличением лотов пропорционально депу ещё раза в два - сколько бы не было, он безубыточный. Леониду таблицу 160 EUR GBP CHF JPY прогнозов даю бесплатно за участие в решении задачи, пришлите WMR ale2715@yandex.ru и в обратном письме получите прогнозы, напишите советник, заработаете, только в чемпионате с ним не участвуйте, я тоже его подцеплю к чемпионату.

 
lasso:

Попробуйте так:

Ну, и соответственно Ф-ции NumberOfPositions и ClosePositions должны в коде присутствовать


спасибо, это направление мы пока оставим
 
Profitabl:

Единственно, что не получается, так это чтобы и SELL позиции закрывались по пятницам в 23:00, а то только BUY закрываются, а SELL модифицируются по три-четыре дня и конечно s\l закрываются.

И правда... )))

Надо так

 //================Закрытие позиций=====================================
if ( DayOfWeek()==5  && Hour() == 23){//если сегодня пятница, 23-00
//закрываем
 ClosePositions(NULL,-1, Magic); }            
                  
//================== Конец блока закрытия  =============================
  return(0);
  }
//ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ Конец функции int start() ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ 
 

Открытие Селл-позиции я вообще в коде не предусматривал. Поскольку в задании - изначально шла речь о открытии бай по франку.

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

Да, нужно  чуть изменить закрытие -  ClosePositions(NULL,-1, Magic)

 
leonid553:

Там были не 4 ошибки. Там были 4 неиспользованные функции. Убрал.

Повторюсь. Проверять на тф=н1

При более пристальном взгляде обнаружил следующие нюансы:

1) условия противоречат друг другу

//если цена open 46 периода 30M четверга меньше цены open 46 периода 30M среды,
//а цена опен среды больше цены опен вторника,
//да ещё цена опен вторника больше цены опен понедельника,
if ( Close[1]<= Open[24] && Close[23]>=Open[48] && Close[47]>=Open[72]) {
//покупаем 


2) обращения к тайм-сериям (типа Open[48]) не совсем корректны при тестировании на истории, т.к. в истории вполне возможны дыры, а значит берется цена не с того бара, о котором пишет топик-стартер


3) Условие на закрытие

 //================Закрытие позиций=====================================
if ( DayOfWeek()==5  && Hour() == 23){//если сегодня пятница, 23-00
//закрываем

не универсально, т.к. например у ДЦ Аль...и нет в пятницу бара со значением часа равным 23


4) и еще несколько более мелких нюансов, но при этом влияние их на результирующую кривую баланса отнюдь не мелкое.... ))


//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж


Прошу понять меня правильно. Данный пост - это не претензия к leonid553, ни в коем случае. (Леониду - респект и уважуха!!!)


Я к тому, что: "Чирк, чирк скриптик, за пять минут" конечно можно. Но практика показывает, что простых ТЗ не бывает.

Везде нужна проверка на граничные значения всех параметров, отладка, установка "ловушек ошибок" и т.п.

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

 

Советник уже торгует на реальном, сегодня две первые сделки открыл в 23, теперь интересно как завтра закроет. Всем спасибо за участие.

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

Например я в советнике для вторника CHF оставил только ВВВ, ВНН, НВН, добавил в него возможность увеличивать лоты пропорционально депозиту, итог в тесте при покупке на 10% депозита 180% с 55 убыточных и прибыльных сделок, а при покупке на 20% рибыль 450%. Очищаешь зерна от красных плевел, учишь советника менять сигналы отмеченные "с" при противоречивых прогнозах ассиметричных пар, не снижать добавленные лоты, торговать одновременно всеми четырьмя валютами и ты "знаком с директором форекса". Достаточно решить эти три задачки и получите этот советник, только в чемпионате с ним не участвуйте, моя аналитиа прославляет моё имя.

Проверьте сами 450% с 27.01.08 всего от трех прогнозов из 160, CHF на 1H. Было даже 830%, осталось бы столько и даже было бы больше, если бы советник только увеличивал лоты.

Файлы:
450_2.rar  20 kb
 

Слов нету... Прямо грааль. Как же это раньше то не заметили?

 
lasso:

При более пристальном взгляде обнаружил следующие нюансы:

......

Прошу понять меня правильно. Данный пост - это не претензия к .......

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

Я пока  так и не вник в тонкости тактики, разве что  - в общих чертах. Но уже сейчас думаю, что тактика заслуживает оч. серьезного внимания. Я занимаюсь, в основном,  сезонной товарной торговлей и именно  поэтому думаю, что перспективы здесь есть. Т.к.  эдесь - по сути, та же "квазисезонная торговля", но краткосрочная, на часах:

"Проверка тенденции :
Для примера возьмем серебро. Часовая свеча, с 18 до 19 часов, более чем в 70 процентах случаев совпадала по направлению с движением цены в последующие 23 часа, что, кстати характерно для некоторых других металлов. Причем это происходило и за последние 50, и 40, и 30, и 20, и 10 дней. Значит, после 19 часов выставляем ордер в направлении этой свечи....
"(с,  - форум БР.)
 

Более того, Совершенно случайно,  я - не далее, как вчера (см. цитату выше)  - обнаружил,  - что именно с такой (ну почти "один в один") тактикой был выигран  последний месячный  демо-конкурс в известном ДЦ БР.  c призом 5000$.

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

Так что, NorthAlec,  - вы, наверное,  напрасно иронизируете. 

Причина обращения: