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

 

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

 

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

Свой блок закрытия удалите. Какой там он правильный....

А вот этот код вставьте перед строкой   :
   
if(total<1){ //если нет открытых позиций

 

//============== Закрытие позиций =============================


if(total>=1){  //если "есть открытых позиций"
//----------------------------------------------------------------------
  for (int v=0; v<OrdersTotal(); v++)                             {       
      if (OrderSelect(v, SELECT_BY_POS, MODE_TRADES))               {           
        if (OrderSymbol()==Symbol())                                 { 
//-----------------------------------------------------                  
if (OrderType() == OP_BUY) { //бай позиция 
    if ( DayOfWeek()==1  && Hour() == 22)    {
           OrderClose(OrderTicket(),OrderLots(),Bid,3,Green); // закрываем позицию
                 return(0); // выходим
                }       
     }  
 //--------------------------------------------------------
if (OrderType() == OP_SELL) { //селл позиция
      if ( DayOfWeek()==1  && Hour() == 22)    {
                 OrderClose(OrderTicket(),OrderLots(),Ask,3,Green); // закрываем позицию
                 return(0); // выходим
                }       
     }  
 //-------------------------------------------------------                       
    }  // Symbol()  
  } // select
 } //total

}//если  "есть открытых позиций"
//============= конец блока закрытия =====================
 

При открытии позиций вы вызываете ф-ю ошибок GetLastError(), но ссылки на неё почему-то нет в коде!

Зачем вы её выкинули из моего кода? -

//-- Подключаемые модули --
#include <stderror.mqh>
#include <stdlib.mqh>
 

тестируется, но в 22 позиции не закрывает. Я ничего не выкидывал, это новый код, так как с вашим советник не торгует, хотя тестируется.

extern double Lots          = 0.1;
extern double TakeProfit    = 120;
extern double StopLoss      = 120;

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  int cnt, ticket, total;
  static int prevtime = 0;
if (Time[0] == prevtime) return(0); //если появился новый бар
   prevtime = Time[0]; // начинаем работу


//+------------------------------------------------------------------+
//|               Открытие позиций понедельника                      |
//+------------------------------------------------------------------+
if ( DayOfWeek()==5){//если сегодня вечер пятницы
if ( Hour() == 23)  {//если - 22 часа терминального времени
// BUY
       if ( Close[1]<= Open[24] && Close[23]<=Open[48] && Close[47]<=Open[72]) {    
        
         ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-40*Point,Ask+120*Point,"Regulest",0,0,Green);}
         if(ticket < 0) {
            Print("Ошибка открытия ордера BUY #", GetLastError()); 
            Sleep(10000);  prevtime = Time[1];  return (0); }}
// SELL
if ( DayOfWeek()==5){//если сегодня вечер пятницы
if ( Hour() == 23)  {//если - 22 часа терминального времени
    if ( Close[1]>= Open[24] && Close[23]<=Open[48] && Close[47]<=Open[72]) {
    
         ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+40*Point,Bid-100*Point,"Regulest",0,0,Red);
         if(ticket < 0) {
            Print("Ошибка открытия ордера SELL #", GetLastError()); 
            Sleep(10000);  prevtime = Time[1];  return (0); }
          } 
        }
//+------------------------------------------------------------------+
//|                     Закрытие позиций                             |
//+------------------------------------------------------------------+
if(total>=1){  //если "есть открытых позиций"
//----------------------------------------------------------------------
  for (int v=0; v<OrdersTotal(); v++)                             {       
      if (OrderSelect(v, SELECT_BY_POS, MODE_TRADES))               {           
        if (OrderSymbol()==Symbol())                                 { 
//-----------------------------------------------------                  
if (OrderType() == OP_BUY) { //бай позиция 
    if ( DayOfWeek()==1  && Hour() == 22)    {
           OrderClose(OrderTicket(),OrderLots(),Bid,3,Green); // закрываем позицию
                 return(0); // выходим
                }       
     }  
//--------------------------------------------------------
if (OrderType() == OP_SELL) { //селл позиция
      if ( DayOfWeek()==1  && Hour() == 22)    {
                 OrderClose(OrderTicket(),OrderLots(),Ask,3,Green); // закрываем позицию
                 return(0); // выходим
                }       
     }  
//-------------------------------------------------------                       
    }  // Symbol()  
  } // select
} //total
}//если  "есть открытых позиций"

               }
      return(0);
     }}
 
extern double Lots          = 0.1;
extern double TakeProfit    = 120;
extern double StopLoss      = 120;
//-- Подключаемые модули --
#include <stderror.mqh>
#include <stdlib.mqh>
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  int cnt, ticket, total;
  static int prevtime = 0;
if (Time[0] == prevtime) return(0); //если появился новый бар
   prevtime = Time[0]; // начинаем работу


//+------------------------------------------------------------------+
//|               Открытие позиций понедельника                      |
//+------------------------------------------------------------------+
if(total<1){  //если нет открытых позиций"
if ( DayOfWeek()==5){//если сегодня вечер пятницы
if ( Hour() == 23)  {//если - 22 часа терминального времени
//---------------------------------------------
// BUY---------------------
       if ( Close[1]<= Open[24] && Close[23]<=Open[48] && Close[47]<=Open[72]) {    
        
         ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-40*Point,Ask+120*Point,"Regulest",0,0,Green);
         if(ticket < 0) {
            Print("Ошибка открытия ордера BUY #", GetLastError()); 
            Sleep(10000);  prevtime = Time[1];  return (0); }
                      }
// SELL-----------------------
    if ( Close[1]>= Open[24] && Close[23]<=Open[48] && Close[47]<=Open[72]) {
    
         ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+40*Point,Bid-100*Point,"Regulest",0,0,Red);
         if(ticket < 0) {
            Print("Ошибка открытия ордера SELL #", GetLastError()); 
            Sleep(10000);  prevtime = Time[1];  return (0); }
          } 
//-----------------------------
    }
    }
   }// если нет открытых позиций

//+------------------------------------------------------------------+
//|                     Закрытие позиций                             |
//+------------------------------------------------------------------+
if(total>=1){  //если "есть открытых позиций"
//----------------------------------------------------------------------
  for (int v=0; v<OrdersTotal(); v++)                             {       
      if (OrderSelect(v, SELECT_BY_POS, MODE_TRADES))               {           
        if (OrderSymbol()==Symbol())                                 { 
//-----------------------------------------------------                  
if (OrderType() == OP_BUY) { //бай позиция 
    if ( DayOfWeek()==1  && Hour() == 22)    {
           OrderClose(OrderTicket(),OrderLots(),Bid,3,Green); // закрываем позицию
                 return(0); // выходим
                }       
     }  
//--------------------------------------------------------
if (OrderType() == OP_SELL) { //селл позиция
      if ( DayOfWeek()==1  && Hour() == 22)    {
                 OrderClose(OrderTicket(),OrderLots(),Ask,3,Green); // закрываем позицию
                 return(0); // выходим
                }       
     }  
//-------------------------------------------------------                       
    }  // Symbol()  
  } // select
} //total
}//если  "есть открытых позиций"

 //
    return(0);
     }

Попробуйте так. И проверьте вниматеьнее условия открытия для бай и селл.

( Close[1]>= Open[24] && ..... ......) 

 

Как ни странно, удалось переделать код базового советника дистрибутива МТ4 Moving Avеrage. В тестере сделки тестируются, в 22 закрываются, будет ли советник торговать сам не знаю. Вот берите код если нужен.

//+------------------------------------------------------------------+
//|                                               Moving Average.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#define MAGICMA  20050610

extern double Lots          = 0.1;
extern double TakeProfit    = 120;
extern double StopLoss      = 120;

//extern double MaximumRisk        = 0.02;
//extern double DecreaseFactor     = 3;
//extern double MovingPeriod       = 12;
//extern double MovingShift        = 6;

//+------------------------------------------------------------------+
//| Calculate open positions                                         |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
  {
   int buys=0,sells=0;
//----
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
        {
         if(OrderType()==OP_BUY)  buys++;
         if(OrderType()==OP_SELL) sells++;
        }
     }
//---- return orders volume
   if(buys>0) return(buys);
   else       return(-sells);
  }

//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
  {
   int    res;
   if(Volume[0]>1) return;
   if ( DayOfWeek()==5){//если сегодня вечер пятницы
   if ( Hour() == 23)  {//если - 22 часа терминального времени
   if ( Close[1]>= Open[24] && Close[23]<=Open[48] && Close[47]<=Open[72]) 
     {
      res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+40*Point,Bid-100*Point,"Regulest",MAGICMA,0,Red);
      return;
     }}}
//---- buy conditions
   if ( DayOfWeek()==5){//если сегодня вечер пятницы
   if ( Hour() == 23)  {//если - 22 часа терминального времени
   if ( Close[1]<= Open[24] && Close[23]<=Open[48] && Close[47]<=Open[72])   
     {
      res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-40*Point,Ask+120*Point,"Regulest",MAGICMA,0,Blue);
      return;
     }}}
//----
  }
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+
void CheckForClose()
  {
   double ma;
//---- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)        break;
      if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
      //---- check order type 
      if(OrderType()==OP_BUY)
        {
         if ( DayOfWeek()==1  && Hour() == 22) OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
         break;
        }
      if(OrderType()==OP_SELL)
        {
         if( DayOfWeek()==1  && Hour() == 22) OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
         break;
        }
     }
//----
  }
//+------------------------------------------------------------------+
//| Start function                                                   |
//+------------------------------------------------------------------+
void start()
  {
//---- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false) return;
//---- calculate open orders by current symbol
   if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
   else                                    CheckForClose();
//----
  }
//+------------------------------------------------------------------+
 
leonid553:

Попробуйте так. И проверьте вниматеьнее условия открытия для бай и селл.

( Close[1]>= Open[24] && ..... ......)


бросьте этот, спасибо, всё получилось с кодом Moving Avеrage. Если в понедельник он сам не проведет сделки, продолжим нашу дискуссию. Надеюсь мой метод теханализа того стоил, четыре советника GBPUSD, EURUSD, USDJPY, USDCHF могут, судя по одному CHF, приносить хорошую прибыль.
 
Profitabl:

Как ни странно, удалось переделать код базового советника дистрибутива МТ4 Moving Aviagre. В тестере сделки тестируются, в 22 закрываются, будет ли советник торговать сам не знаю. Вот берите код если нужен.


  К сож. этот советник может корректно работать только в тестере.... 

В онлайне - больше половины сигналов будет пропущено. Вот из за этого условия:

 if(Volume[0]>1) return;
 

что же сделать, как его изменить, может просто удалить, ведь параметров Movinga в коде уже нет

а как же Moving с этим кодом все сделки проводит?

необходимо чтобы все сделки проводились, их не много по одной в день, надо бы чтобы советник в течение получаса от появления цены опен в 23 часа предпринял 20-40 попыток и позицию открыл

значит и с вашим кодом советник мог во вторник открыть позиции, а в четверг и пятницу пропустить тики

 
Profitabl:

что же сделать, как его изменить, может просто удалить, ведь параметров Movinga в коде уже нет

а как же Moving с этим кодом все сделки проводит?

необходимо чтобы все сделки проводились, их не много по одной в день, надо бы чтобы советник в течение получаса от появления цены опен в 23 часа предпринял 20-40 попыток и позицию открыл

значит и с вашим кодом советник мог во вторник открыть позиции, а в четверг и пятницу пропустить тики

Да, удалите все эти строчки. По логике вашего советника они не нужны.