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

 
d1w4m3:


回答ありがとうございます、しかし、私は2週間ほど勉強を始めたばかりです、これをコードで実装する方法、またはどこを読めばいいのか教えてください。それともイゴール・キムによると?

そして、まだそれは、その作業を開始したばかりのときに、システムに従っていない、ポジションを開く、あなたの条件は、この問題を回避することはできません。

考えてみると?なぜ、問題を回避できないのか?

彼が仕事を始めたとき、そして彼が以前に働いていない場合(一般に最初の実行)、彼のポジションはまだ存在せず、論理は最後に閉じたポジションが まだ単に存在しないことを示すでしょう。これは、ストップでもテイクでも決済されなかったことを意味し、その結果、シグナルでポジションを建てる許可が与えられます。

そうでしょう?

 
Artyom Trishkin:

考えてみると?なぜ、問題を回避できないのか?

動作開始時、それまで動作していなかった場合(全くの初動)、そのポジションはまだそこになく、論理的には最後に閉じたポジション がまだそこにないだけであることがわかります。これは、ストップでもテイクでも決済されなかったことを意味し、その結果、シグナルでポジションを建てる許可が与えられます。

そうでしょう?


それは、「信号で!」ということです。しかし、この条件は2本目(インジケータがバッファを変更した時点)ではなく、任意の2本目で満たされる可能性があります(もちろん、その後はすべてシステムを通して機能します)。問題は、注文を開くための条件であり、それを修正する方法が、インジケータバッファの変更後2番目のバーに?

void OnTick()

{
uptr = NormalizeDouble(iCustom(NULL, 0, "Slope Direction Line", period, method, price, 0, n), 4)。
dntr = NormalizeDouble(iCustom(NULL, 0, "Slope Direction Line", period, method, price, 1, n), 4)です。
if(DN_Trend()==true)
{
if(CountSell() == 0 && Bid < dntr && Open[3] < dntr && Close[3] < dntr)
{
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "Sloper", Magic, 0, Red);
{
SL = NormalizeDouble(Bid + StopLoss*Point, Digits)です。
TP = NormalizeDouble(Bid - TakeProfit*Point, Digits)です。
if (OrderSelect(ticket, SELECT_BY_TICKET))
if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))
Print("販売エラー");
}

}


 
d1w4m3:


まあ、要は信号がベースなんですけどね~。しかし、この条件は2本目のバー(インジケータがバッファを変更した時点)ではなく、任意の2本目のバーで満たされる可能性があります(もちろん、その後はすべてシステムで機能します)。問題は、注文を開くための条件であり、それを修正する方法が、インジケータバッファの変更後2番目のバーに?

void OnTick()

{
uptr = NormalizeDouble(iCustom(NULL, 0, "Slope Direction Line", period, method, price, 0, n), 4)。
dntr = NormalizeDouble(iCustom(NULL, 0, "Slope Direction Line", period, method, price, 1, n), 4)。
if(DN_Trend()==true)
{
if(CountSell() == 0 && Bid < dntr && Open[3] < dntr && Close[3] < dntr)
{
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "Sloper", Magic, 0, Red);
{
SL = NormalizeDouble(Bid + StopLoss*Point, Digits)です。
TP = NormalizeDouble(Bid - TakeProfit*Point, Digits)です。
if (OrderSelect(ticket, SELECT_BY_TICKET))
if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))
Print("販売エラー");
}

}


コードを正しく挿入してください。メッセージエディタメニューに SRCボタンがあります。
あなたの説明では何もわかりませんでした。
 
d1w4m3:


そこがポイントです!しかし、この条件は2本目(インジケータがバッファを変更した時点)ではなく、任意の2本目で満たされる可能性があります(もちろん、その後はすべてシステムで機能します)。問題は、注文を開くための条件であり、それを修正する方法が、インジケータバッファの変更後2番目のバーに?

void OnTick()
{
  uptr = NormalizeDouble(iCustom(NULL, 0, "Slope Direction Line", period,  method, price, 0, n), 4);
  dntr = NormalizeDouble(iCustom(NULL, 0, "Slope Direction Line", period,  method, price, 1, n), 4); 
  
if(DN_Trend()==true)
{
  if(CountSell() == 0 && Bid < dntr && Open[3] < dntr && Close[3] < dntr)
  { 
   ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "Sloper", Magic, 0, Red);
      if (ticket > 0)
      {
         SL = NormalizeDouble(Bid + StopLoss*Point, Digits);
         TP = NormalizeDouble(Bid - TakeProfit*Point, Digits);
         
         if (OrderSelect(ticket, SELECT_BY_TICKET))
         if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))
           Print("Ошибка на продажу");
      }

  }


1. コードを正しく挿入すると、このようになります。開発者が思いついたのには理由があるんです...。

2.微妙なヒント:Open[4]とClose[4]はインジケーターの値に対してどこにあるのか?

 
extern int TakeProfit  = 200;
extern double Lots     = 0.1;
extern int StopLoss    = 52;
extern int Magic       = 1111;
extern int Slippage    = 3;
extern int n           = 3; // На какую свечу открывать ордер
//------------------------------------------------------------------
extern int  LevelWLoss  = 1;      // Уровень безубытка
extern int  LevelProfit = 30;     // Уровень профита
//------------------------------------------------------------------
extern string    Slope  = "Параметры Slope";
extern int       period = 163; 
extern int       method = 3;                         
extern int       price  = 0;    
//------------------------------------------------------------------
double uptr, SL, TP, dntr;
int    ticket, nd;
bool   fm;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
   if (Digits == 3 || Digits == 5)
   {
       TakeProfit  *=10;
       StopLoss    *=10;
       Slippage    *=10;
       LevelWLoss  *=10;
       LevelProfit *=10;
   }
   return(0);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{

}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
  uptr = NormalizeDouble(iCustom(NULL, 0, "Slope Direction Line", period,  method, price, 0, n), 4);
  dntr = NormalizeDouble(iCustom(NULL, 0, "Slope Direction Line", period,  method, price, 1, n), 4); 
  
if(DN_Trend()==true)
{
  if(CountSell() == 0 && Bid < dntr && Open[3] < dntr && Close[3] < dntr)
  { 
   ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "Sloper", Magic, 0, Red);
      if (ticket > 0)
      {
         SL = NormalizeDouble(Bid + StopLoss*Point, Digits);
         TP = NormalizeDouble(Bid - TakeProfit*Point, Digits);
         
         if (OrderSelect(ticket, SELECT_BY_TICKET))
         if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))
           Print("Ошибка на продажу");
      }
  }
}//if(DN_Trend()==true)

if(UP_Trend()==true)
{
   if( CountBuy() == 0  && Ask > uptr && Open[3] > uptr && Close[3] > uptr  )
  {
   ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "Sloper", Magic, 0, Blue);
      if (ticket>0)
      {
         TP = NormalizeDouble(Ask + TakeProfit*Point, Digits);
         SL = NormalizeDouble(Ask - StopLoss*Point, Digits);
         
         if (OrderSelect(ticket, SELECT_BY_TICKET))
            if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))
               Print("Ошибка на покупку");
       }
    }
}//if(UP_Trend()==true)

      if ( CountSell()>0  && Open[3] > uptr && Close[3] > uptr && UP_Trend()==true)
      {
      for(int i = OrdersTotal() -1; i>=0; i--)
          {
            if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
            {
            if (OrderMagicNumber() == Magic && OrderType() == OP_SELL)
            if(!OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Black))
            Print("Ошибка");
            }
          }
      }
      if ( CountBuy()>0 && Open[3] < dntr && Close[3] < dntr && DN_Trend()==true)
      {
      for(int i = OrdersTotal() -1; i>=0; i--)
          {
            if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
            {
            if (OrderMagicNumber() == Magic && OrderType() == OP_BUY)
            if(!OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Black))
            Print("Ошибка");
            }
          }
      }
      //+переход в безубыток+
   for( int i=0; i<OrdersTotal(); i++) 
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) 
        {
        if(OrderSymbol()== Symbol() && OrderMagicNumber()==Magic)
          {
            if(OrderType()==OP_BUY) 
              {
                if(OrderStopLoss()-OrderOpenPrice()<LevelWLoss*Point) 
                 {
                   if(Bid-OrderOpenPrice()>LevelProfit*Point) 
                 {
                  fm=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+LevelWLoss*Point,OrderTakeProfit(),CLR_NONE);
                 }
              }
            }
           }
         if(OrderType()==OP_SELL) 
           {
            if(OrderStopLoss()==0 || OrderOpenPrice()-OrderStopLoss()<LevelWLoss*Point) 
              {
               if(OrderOpenPrice()-Ask>LevelProfit*Point) 
                 {
                  fm=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-LevelWLoss*Point,OrderTakeProfit(),CLR_NONE);
                 }
              }
           }
       
        }
     }
     
//------------  комментарии -----------------+     
  if(UP_Trend()) Comment("Восходящий тренд ", uptr);
  if(DN_Trend()) Comment("Нисходящий тренд ", dntr);
 
 }
//+------------------------------------------------------------------+
int CountSell()
{
   int count = 0;
   for (int trade = OrdersTotal()-1; trade>=0; trade--)
   {
        if(OrderSelect(trade, SELECT_BY_POS, MODE_TRADES))
    {
            if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELL)
                    count++;   
    }
   }
     return(count);
}
//+------------------------------------------------------------------+
int CountBuy()
{
   int count = 0;
   for (int trade = OrdersTotal()-1; trade>=0; trade--)
   {
        if(OrderSelect(trade, SELECT_BY_POS, MODE_TRADES))
    {
            if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
                    count++;   
    }
   }
     return(count);
}
//+------------------------------------------------------------------+
bool UP_Trend()
{
  if(uptr > 0 && uptr != 2147483647.0) return(true);
  return(false);
}
//+------------------------------------------------------------------+
bool DN_Trend()
{
  if(dntr > 0 && dntr != 2147483647.0) return(true);
  return(false);
}
//+------------------------------------------------------------------+
 

お客様の条件を挿入すると、「これは、ストップまたはテイクのいずれかで閉じることができなかったことを意味し、順番にシグナルでポジションを開く許可を与える。"

そして、私のシグナルは"if(CountSell() == 0 && Bid < dntr && Open[3] < dntr && Close[3] < dntr)" となります。(指標n=3のずれと合わせて)。

チャート上に即座に配置すると、下降トレンドの 場合、ローソク足3本目のスタート時点からオープンし、その後、シグナルがあれば、必要に応じてオープンすることが判明した。

 
d1w4m3:

お客様の条件を挿入すると、「これは、ストップまたはテイクのいずれかで閉じることができなかったことを意味し、順番にシグナルでポジションを開く許可を与える。"

そして、私のシグナルは"if(CountSell() == 0 && Bid < dntr && Open[3] < dntr && Close[3] < dntr)" となります。(指標n=3のずれと合わせて)。

チャート上に即座に配置すると、下降トレンドの 場合、3本目のローソク足でスタートした瞬間に開き、その後、シグナルがあれば、必要に応じて開くことが判明しました。

私は何も理解していません。理解できないものがあるのか?最後のポジションがストップまたはテイクでクローズされたと判断できないのですか?この条件を確認する場所がコード内に見つからないのでしょうか?

あるいは、何ができないのか?

それはどのように3番目のキャンドルに開くことができますか? または"それは3番目のキャンドルに開くだろう " の意味を説明してください。それはどういうことなのでしょうか?
 

あるシグナルで注文が開始されるたびに、そのシグナルの種類を変数に格納するにはどうすればよいですか?

私の条件は、特定のろうそくを参照していないため、バグ(私はEAを実行するとき)、順序は、トレンドの開始時に(ない指標の色の変化に応じて)開かないが、トレンドが上または下なら3ろうそくの開始時に開くと言います。


 

皆さん、こんにちは。

EXCElで仕事の統計を分析する方法を知りたいのですが。

mt4からDDEで何が引き出せるか、またExcelに転送するための全ての許容関数はどこで手に入るか、どなたか教えてください。

よろしくお願いします。

 
Maxim Shershnev:

皆さん、こんにちは。

EXCElで仕事の統計を分析する方法を知りたいのですが。

mt4からDDEで何が引き出せるか、またExcelに転送するための全ての許容関数はどこで手に入るか、どなたか教えてください。

よろしくお願いします。

必要なものはすべて揃って います。.csvレコード形式は、Excelに書き込みます。
Файловые операции - Справочник MQL4
Файловые операции - Справочник MQL4
  • docs.mql4.com
Файловые операции - Справочник MQL4
理由: