Que quelqu'un écrive un script pour 5 wmz. - page 16

 

Et je cherche simplement la raison pour laquelle les positions ne se ferment pas, dans le bloc de fermeture de position, alors que c'est correct. Quel serait le bon ?

 

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

Retirez votre bloc de fermeture. Quel est le bon, là....

Insérez ce code avant la ligne :

if(total<1){ //s'il n'y a pas de positions ouvertes

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


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

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

Lors de l'ouverture des positions, vous appelez la fonction d'erreur GetLastError(), mais il n'y a aucune référence à celle-ci dans le code pour une raison quelconque !

Pourquoi l'avez-vous retiré de mon code ? -

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

est testé, mais ne se ferme pas à 22 positions. Je n'ai rien jeté, c'est un nouveau code, car l'EA ne fonctionne pas avec le vôtre, bien qu'il le teste.

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);
     }

Essayez de cette façon. Et vérifiez soigneusement les conditions d'ouverture pour l'achat et la vente.

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

 

Bizarrement, j'ai réussi à retravailler le code de l'EA de base MT4 distribution Moving Average. Dans le testeur, les transactions sont testées, dans le 22 elles sont fermées, je ne sais pas si l'EA va se négocier lui-même. Voici le code si vous en avez besoin.

//+------------------------------------------------------------------+
//|                                               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:

Essayez de cette façon. Et vérifiez soigneusement les conditions d'ouverture pour l'achat et la vente.

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


Laissez tomber celui-ci, merci, tout s'est arrangé avec le code de l'Avrage mobile. S'il ne fait pas les échanges lui-même lundi, continuons notre discussion. J'espère que ma méthode de tehanalyse en valait la peine, quatre EAs GBPUSD, EURUSD, USDJPY, USDCHF peuvent, à en juger par un CHF, apporter de bons profits.
 
Profitabl:

Curieusement, j'ai réussi à retravailler le code de la distribution de base MT4 Moving Aviagre EA. Dans le testeur, les transactions sont testées, dans le 22 elles sont fermées, je ne sais pas si l'EA va se négocier lui-même. Voici le code si vous en avez besoin.


Malheureusement, ce conseiller ne peut fonctionner correctement que dans le testeur.....

En ligne - plus de la moitié des signaux seront manqués. Cela est dû à cette condition :

 if(Volume[0]>1) return;
 

que faire, comment le changer, peut-être juste le supprimer, parce que les paramètres de Movinga ne sont plus dans le code

comment Movinga avec ce code se comporte-t-il dans toutes les transactions ?

vous devez laisser toutes les transactions être exécutées, il n'y en aura pas beaucoup, une par jour. Il faut que le conseiller expert fasse 20-40 tentatives et ouvre une position dans la demi-heure qui suit l'apparition du prix d'ouverture à 23 heures.

Cela signifie qu'avec votre code, le conseiller expert pourrait ouvrir une position le mardi et manquer les ticks du jeudi et du vendredi.

 
Profitabl:

que faire, comment le changer, peut-être juste le supprimer, parce que les paramètres de Movinga ne sont plus dans le code

comment Movinga avec ce code se comporte-t-il dans toutes les transactions ?

vous devez laisser toutes les transactions être exécutées, il n'y en aura pas beaucoup, une par jour. Il faut que le conseiller expert fasse 20-40 tentatives et ouvre une position dans la demi-heure qui suit l'apparition du prix d'ouverture à 23 heures.

Cela signifie qu'avec votre code, le conseiller expert pourrait ouvrir une position le mardi et manquer les ticks du jeudi et du vendredi.

Oui, supprimez toutes ces lignes. Selon la logique de votre conseiller, ils sont inutiles.