MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 482

 

@STARIJ ありがとうございます!ObjectSetは じっくりと書きましたよ。長い間、コメントもなく、コードが干渉しないように書かれていますStringSubstr(str,20,7)と書いてありますが、まさか全部リテラル だとは思いませんでした!?夕食後、私はスペースが重要であることに気づきました。文字とスペースを全部数えればよかった!?ありがとう友達!!!!


 

こんにちは、親愛なる皆さん。またまた、μl4初心者からの質問です。チュートリアルで推奨されているFun_New_Bar()関数を使って、新しいバーを定義しています。


void Fun_New_Bar()                              // Ф-ия обнаружения нового бара   
  {                                             
   static datetime New_Time=0;                  // Время текущего бара  
   New_Bar=false;                               // Нового бара нет  
   if(New_Time!=Time[0])                        // Сравниваем время  
     {  
      New_Time=Time[0];                         // Теперь время такое  
      New_Bar=true;                             // Поймался новый бар  
     }  
  }
しかし、なぜかいつもうまくいくわけではありません。プリントチェックを入れました。
if(Hour()>=8 && Hour()<20) 
      {
      Fun_New_Bar();
      if(New_Bar==false) Print("Нового бара нет");
      if(New_Bar==true )      
       {     
       RefreshRates();
        ........... Fun_Open_Sell();          
        ........... Fun_Open_Buy();
       } 
      }

そこで、新しいバーでポジションを開き、その後「新しいバーはありません」と表示し、現在のバーでポジションを開きます。その理由がわからない。ありがとうございます。

 
novichok2018:

こんにちは、親愛なる皆さん。またまた、μl4初心者からの質問です。チュートリアルで推奨されているFun_New_Bar()関数を使って、新しいバーを定義しています。

しかし、なぜかいつもうまくいかない。プリントチェックを入れてみました。

そこで、新しいバーでポジションを開き、その後「新しいバーはありません」と表示し、現在のバーでポジションを開きます。その理由がわからない。ありがとうございます。

Newバーと Currentバーの見分け方は?このコードの部分はどれくらいの頻度で実行されるのでしょうか。毎ティックな のか、それとも新しいバーが 形成されたときだけなのか。

 
STARIJ:

Newバーと Currentバーをどのように区別していますか?このコードの部分はどれくらいの頻度で実行されるのでしょうか。毎ティックな のか、それとも新しいバーが 形成されたときだけなのか。

新しいバー - 機能別現在のバー -ポジションがクローズさ れたが、バータイムが終了していない状態です。このコードは、新しいバーが 形成される瞬間に実行される必要があります。というか、そうではない。ポジションを閉じる条件を定義した部分は1ティックごとに実行され、ポジションを開く条件は新しいバーで実行されます。

 
novichok2018:

新しいバー - 機能別現在 -ポジションは閉じられたが、バータイムは失効していない場合。新しいバーが 形成された瞬間にコードを実行する必要があります。というか、そうではありません。ポジションを閉じる条件を定義した部分は1ティックごとに実行され、ポジションを開く条件は新しいバーで実行されます。

だから、ここですべてが明らかになる。でも、書いていて、もっと正確に書いたほうがいいと思ったときは、カーソルを戻して修正します。そうでないと、あれこれと読みにくいのです。

コードは1目盛り ごとに実行されます。すなわち、「新しいバーは あるのか?新しいバーが あるのですか?Is therenew bar? と表示され、その都度、新しいバー がない旨のメッセージが出力されます。そして、新しいバーの 登場です。注文が始まる?まず、サーバーにコマンドが送信されます。そして、ティックが入り、新しいバーが ある?新しいバーが なく、そのたびにサーバーがやっと注文を開け、時間を見て「今何時だろう?注文を開始する前にPrint(TimeCurrent())を使用すると、最初の行の4行下になります。あるいは、画面上でAlert-を使用 するのもよいでしょう。一目で分かるようになっています。

もう一つ、if(New_Bar==false) if(New_Bar==true) の代わりに if(!New_Bar) if(New_Bar) とすると、バター状の油が出る。

 
STARIJ:

つまり、ここではすべてがクリアになっているのです。しかし、書いてみて、もっと正確に書く必要があると分かったら、カーソルを戻して修正する。あれこれと読むのは難しいですね。

コードは1目盛り ごとに実行されます。すなわち、「新しいバーは あるのか?新しいバーが あるのですか?Is therenew bar? と表示され、その都度、新しいバー がない旨のメッセージが出力されます。そして、新しいバーの 登場です。注文が始まる?まず、サーバーにコマンドが送信されます。そして、ティックが入り、新しいバーが ある?新しいバーが なく、そのたびにサーバーがやっと注文を開け、時間を見て「今何時だろう?注文を開始する前にPrint(TimeCurrent())を使用すると、最初の行の4行下になります。あるいは、画面上でAlert-を使用 するのもよいでしょう。一目で分かるようになっています。

そしてもう一つ、if(New_Bar==false) if(New_Bar==true) の代わりに if(!New_Bar) if(New_Bar) を使うと、オイルが発生します。

OK、新しいバーの不在に関するメッセージですべてクリアです。追加印刷をしなくても、プラットフォームによってジャーナルに表示される注文開始時刻で十分である。しかし、コードによると、ポジションを開く 条件を探す前に新しいバーが表示されるはずですが、なぜ新しいバーで1回、現在のバーで2回目の注文が開かれるのか、まだ理解していません。

 
novichok2018:

OK、新しいバーがないことについてのメッセージですべてがクリアになりました。追加印刷をしなくても、プラットフォームによってログに印刷される注文開始時刻で十分です。しかし、コードによると、ポジションを開く 条件を探す前に新しいバーが表示されるはずなのに、なぜ注文は一度だけ新しいバーで開き、二度目は現在のバーで開くのか、私にはまだ理解できません。

まず、サーバーにコマンドを送信する。そうこうしているうちに、ティックが来て新しいバーが あるのか?新しいバーが あるわけでもなく、そのたびにサーバーがようやくオーダーを開き、時間を見ては不思議に思う。注文を開始する前にPrint(TimeCurrent())を使用すると、最初の行の4行下になります。さらに、Alertを使えば、画面に直接表示させることもできます。一目瞭然...注文を開くコマンドは、新しいバーで 先に送信されたものです

 

2本のインジケーターラインの 間にシェーディングカラーが入るようにするにはどうしたらよいか教えてください。

ishimokuのように

 
Roman Sharanov:

インジケーターの 2行の 間に濃淡の色をつける方法を教えてください。 ishimokuのような感じです。

そこでどのように 行われているのかを見てみましょう...そして、その端末には、おそらく...

 

こんにちは、私は2013年のビデオチュートリアルを使ってMQL4の勉強を始めました。 私はコードをビデオに忠実に書き直し、必要であれば他のものから若干の変更を加えています。 その結果、25のエラーが発生しました。これらのエラーの解決策を探そうとしましたが、ターミナルのビルドが変更され、コーディングにいくつかの変更が発生したためです。どなたか、コードの編集を手伝ってくださるか、少なくとも有用なアドバイスをいただけるとありがたいです、よろしくお願いします。

//+------------------------------------------------------------------+
//|                                                           ea.mq4 |
//|                                                             mql4 |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Intruder"
#property link      ""
#property version   "1.00"
#property strict

extern double Lots         = 0.1;
extern int    TakeProfit   = 50;
extern int    Step         = 50;
extern double Multiplier   = 2;
extern int    Slippage     = 5;
extern int    Magic        = 123;

extern int    MA_1_Period  = 21;
extern int    MA_1_Shift   = 0;

extern int    MA_2_Period  = 3;
extern int    MA_2_Shift   = 0;


int ticket;
double price, TP, lastlot;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int Init()
{
   if (Digits == 3 || Digits == 5)
   {
       TakeProfit *= 10;
       Step       *= 10;
       Slippage   *= 10;  
   }
   return(0);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Expert start function                                             |
//+------------------------------------------------------------------+
int start()
{
   if (CountTrades() == 0)
   {
      double ima_1 = iMA(Symbol(), PERIOD_CURRENT, MA_1_Period, MA_1_Shift, MODE_SMA, PRICE_CLOSE, 1);
      double ima_2 = iMA(Symbol(), PERIOD_CURRENT, MA_2_Period, MA_2_Shift, MODE_SMA, PRICE_CLOSE, 1);
      
      if (ima_1 > ima_2)
      {
         ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "", Magic, 0, Blue);
         if(ticket > 0)
         {
            TP = NormalizeDouble(Ask + TakeProfit * Point, Digits);
            OrderModify(ticket, OrderOpenPrice(), 0, TP, 0);
         }
      }
      else if(ima_1 < ima_2)
      {
         ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "", Magic, 0, Red);
         if(ticket > 0)
         {
            TP = NormalizeDouble(Bid - TakeProfit * Point, Digits);
            OrderModify(ticket, OrderOpenPrice(), 0, TP, 0);
         }
      }
      
   }
   else
   {
      int order_type = FindLastType();
      if (order_type == OP_BUY)
      {
         price = FindLastOrderPrice(OP_BUY);
         if(Ask <= price - Step * Point)
         {
            Lastlot = FindLastLots (OP_BUY);
            lastlot = NormalizeDouble(lastlot * Multiplier, 2);
            ticket = OrderSend(Symbol(), OP_BUY, lastlot, Ask, Slippage, 0, 0, "", Magic, 0, Blue);
            if (ticket > 0)
               ModifiOrders(OP_BUY);
         }
      }
      else if (order_type == OP_SELL)
      {
          price = FindLastOrderPrice(OP_SELL);
         if(Bid <= price + Step * Point)
         {
            Lastlot = FindLastLots (OP_SELL);
            lastlot = NormalizeDouble(lastlot * Multiplier, 2);
            ticket = OrderSend(Symbol(), OP_BUY, lastlot, Bid, Slippage, 0, 0, "", Magic, 0, Red);
            if (ticket > 0)
               ModifiOrders(OP_SELL);
         }        
      }
   }
   
   return(0);
}
//+------------------------------------------------------------------+
void ModifiOrders(int otype)
{
   double avgprice = 0,
          order_lots= 0;
   
   price = 0;
   for (int i=OrdersTotal()-1; i>=0; i--)
   {
      if (OrderSelecti(i, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
         {
            price += OrderOpenPrice() * OrderLots();
            order_lots += OrderLots();
         }
      }
   }
   avgprice = NormalizeDouble(price / order_lots, Digits);
   
   if (otype == OP_BUY) TP = NormalizeDouble(avgprice + TakeProfit*Point, Digits);
   if (otype == OP_SELL) TP = NormalizeDouble(avgprice - TakeProfit*Point, Digits);
   
   for (i=OrdersTotal()-1; i>=0; i--)
   {
      if (OrderSelect(i SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
            OrderModify(OrderTicket(), OrderOpenPrice(), 0, TP, 0)    
      } 
   }
}
//+------------------------------------------------------------------+
double FindLastLots(int otype)
{
   double oldlots;
   int oldticket;
   
   ticket = 0;
   for(int i = OrdersTotal ()-1; i>=0; i--)
   {
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() ++ otype)
         {
            oldticket = OrderTicket();
            if(oldticket > ticket)
            {
               oldlots = OrderLots();
               ticket = oldticket;
            }
         }
      }
   }
   return(oldlots);
}
//+------------------------------------------------------------------+
double FindLastOrderPrice(int otype)
{
   double oldopenprice;
   int    oldticket;
   
   ticket = 0;
   
   for(int i=OrdersTotal()-1; i>=0; i--)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype
         {
            oldticket = OrderTicket();
            if(oldticket > ticket)
            {
               oldopenprice = OrderOpenPrice();
               ticket = oldticket;
            }
         }
      }
   }
   return(oldopenprice);
}
//+------------------------------------------------------------------+
int FindLastOrderType()
{
   for (int i= OrdersTotal()-1; i>=0; i--)
   {
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderSymbol() == Symbol() && OrderMagicNumber () == Magic)
              return(OrderType());
      }
   }
   return(-1);   
}
//+------------------------------------------------------------------+
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);

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

エラー