誰か5wmzのスクリプトを落書きしてくれ。 - ページ 16

 

そして、ポジションクローズブロックで、正しいのに、ポジションがクローズしない理由を探しているところなのです。何が正解なのでしょうか?

 

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

クロージングブロックを外す。そこで右のものは何かというと...。

次のコードを行の前に 挿入してください :

if(total<1){//open positionsが ない場合

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


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ポジションでクローズしません。 何も捨てていません、テストはしていますが、EAがあなたのものと取引しないので、新しいコードです。

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] && .............................................)

 

奇しくも、ベースとなるMT4配信のMoving Average EAのコードを作り直すことに成功しました。テスターでは取引はテストされ、22では取引は終了していますが、EAが自ら取引するかどうかはわかりません。必要であれば、ここにコードを記載します。

//+------------------------------------------------------------------+
//|                                               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 Avrageのコードですべてうまくいきました。月曜日に彼自身がトレードをしないのであれば、議論を続けよう。4つのGBPUSD, EURUSD, USDJPY, USDCHF EAsは、1つのCHFから判断して、良い利益をもたらすことができる、私のテハン分析方法は、それに値することを願っています。
 
Profitabl:

奇しくも、基本的なMT4配信のMoving Aviagre EAのコードを作り直すことに成功したのです。 テスターでは取引はテストされ、22では取引は終了していますが、EAが自ら取引するかどうかはわかりません。 必要であれば、ここにコードを記載します。


残念ながら、このアドバイザーはテスターでしか正常に動作しないのですが...。

オンライン - 半分以上の信号が欠落します。このような状態になっているからです。

 if(Volume[0]>1) return;
 

どうすればいいのか、どう変更すればいいのか、もしかしたら削除すればいいのか、だってMovingaのパラメータはもうコードにないんだから。

このコードを使ったMovingaは、どのようにすべての取引を実行するのですか?

エキスパートアドバイザーが20~40回試行し、23時位置にオープンプライスが表示されてから30分以内にポジションを建てる必要があります。

つまり、あなたのコードでは、Expert Advisorは火曜日にポジションをオープン し、木曜日と金曜日のティックを逃す可能性があります。

 
Profitabl:

どうすればいいのか、どう変更すればいいのか、もしかしたら削除すればいいのか、だってMovingaのパラメータはもうコードにないんだから。

このコードを使ったMovingaは、どのようにすべての取引を実行するのですか?

エキスパートアドバイザーが20~40回試行し、23時位置にオープンプライスが表示されてから30分以内にポジションを建てる必要があります。

つまり、あなたのコードでは、Expert Advisorは火曜日にポジションをオープンし、木曜日と金曜日のティックを逃す可能性があります。

はい、その行をすべて削除してください。顧問の理屈では、不要なものなのでしょう。