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

 

iCustom経由でインジケーターに動的な入力パラメータを渡すことは可能ですか?これを実行しようとすると、新しい動的入力パラメータごとに、新しいインジケータ・ウィンドウが開きます。

   if(NewBarCur())BulsPeriod++;
   double sep_window=iCustom(Symbol(),PERIOD_CURRENT,"Bulls",BulsPeriod,0,0);
 
それとこの質問ですが、例えばテストチャートの残り時間が1バーなのか3分なのかを知る方法はないのでしょうか?
 
Artyom Trishkin:

このスレッドでは、新しいMQL4でプログラミングを理解し、学び、MQL5に簡単に切り替えたいと考えている人たちの手助けを始めたいと思います - 言語は非常によく似ています。

タスクやそれを解決するためのアルゴリズムなど、とにかくMTプログラミングに関連する疑問について話し合う場とします。

当フォーラムの他の経験豊富なメンバーにも参加してもらい、このスレッドが皆にとって興味深いものになることを期待しています。


アルチョム・トリシキン

このブランチでは、新しいMQL4でプログラミングを本当に理解し学びたい、そしてMQL5に簡単に切り替えたい、つまり言語が非常に似ている、という方々のお手伝いを始めたいと思います。

MTのプログラミングに関する問題やアルゴリズム、その他の質問について議論する良い場となるでしょう。

当フォーラムの他の経験豊富なメンバーも一緒になって問題を解決し、このスレッドが皆の興味を引くことを期待しています。


アルチョム・トリシキン

このブランチでは、新しいMQL4でプログラミングを本当に理解し学びたい、そしてMQL5に簡単に切り替えたい、つまり言語が非常に似ている、という方々のお手伝いを始めたいと思います。

MTのプログラミングに関する問題やアルゴリズム、その他の質問について議論する良い場となるでしょう。

当フォーラムの他の経験豊富なメンバーにも参加してもらい、このトピックが皆にとって興味深いものになることを期待しています。


アルチョム・トリシキン

このブランチでは、新しいMQL4でプログラミングを本当に理解し学びたい、そしてMQL5に簡単に切り替えたい、つまり言語が非常に似ている、という方々のお手伝いを始めたいと思います。

MTのプログラミングに関する問題やアルゴリズム、その他の質問について議論する良い場となるでしょう。

当フォーラムの他の経験豊富なメンバーにも参加してもらい、このトピックが皆にとって興味深いものになることを期待しています。


アルチョム・トリシキン

このブランチでは、新しいMQL4でプログラミングを本当に理解し学びたい、そしてMQL5に簡単に切り替えたい、つまり言語が非常に似ている、という方々のお手伝いを始めたいと思います。

この場では、タスクやその解決方法、その他MTプログラミングに関連するあらゆる疑問について議論することができます。

当フォーラムの他の経験豊富なメンバーにも参加してもらい、このトピックが皆にとって興味深いものになることを期待しています。


アルチョム

アルチョム・トリシキン

この章は、新しいMQL4でプログラミングを本当に理解し、学びたい人、そしてMQL5に簡単に切り替えたい人のために始めたいと思います - 言語はとてもよく似ています。

ここは、タスクやそれを解決するためのアルゴリズム、その他MTプログラミングに一通り関連するあらゆる疑問について議論する場です。

当フォーラムの他の経験豊富なメンバーも一緒になって問題を解決し、このスレッドが皆の興味を引くことを期待しています。


助けてください、私は自分のEAにトレーリングストップ機能を追加しました、私はそれをテストし、それは私に2つのエラーを与える。- どう直せばいいのかわからない。しかし、取引は旧来の戦略に従って、価格がチャンネルの上限と下限にそれぞれタッチした後に終了します。ここでも何かを変えなければならないのでしょう。- DNRの軍隊の連中を呼び戻す。

#property copyright "Copyright 2017, MetaQuotes Software Corp.

#プロパティリンク "https://www.mql5.com"

#property version "1.00"

#プロパティの厳密さ


//---------------------------------------------------------

extern double Lots = 0.01;

extern int TakeProfit = 600;

extern int StopLoss = 25;

extern int Magic = 0001;

extern int Slippage = 3;

extern int TralType = 0; // 0-SAR、1-ATR、2-HMA。

extern double SAR_Step = 0.02;

extern double SAR_Max = 0.2;

extern int ATR_Period = 14;

extern double ATR_K = 2.0;

extern inttern HMA_Period = 16;

extern intern HMA_Method = 3;

extern inttern HMA_Shift = 0;

datetime LBT。

//---------------------------------------------------------

extern string TMA = "TMAインジケータパラメータ";

extern string TimeFrame = "現在の時間枠";

extern int HalfLength = 56;

extern int Price = "PRICE_CLOSE;

extern double ATRMultiplier = 2.0;

extern inttern ATRPeriod = 100;

extern bool Interpolate = true;

//---------------------------------------------------------

Double PriceHigh, PriceLow, SL, TP;

int ticketです。


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

//| 専門家による初期化機能

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

int OnInit()

{

if (Digits == 3 || Digits == 5)

{

TakeProfit *= 10;

StopLoss *= 10;

スリッページ *= 10;

}

return(INIT_SUCCEEDED);

}

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

//| 専門家による初期化関数

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

void OnDeinit(const int reason)

{


}

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

//| エキスパートティック機能

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

void OnTick()

{

PriceHigh = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 1, 0)です。

PriceLow = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 2, 0)です。

if(CountSell() == 0 && Bid >= PriceHigh)

{

ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "TMA robot", 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(" 注文変更エラー!")

}

}

if (CountBuy() == 0 && Ask <= PriceLow)

{

ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "TMA robot", Magic, 0, Blue)です。

{

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("買い注文の修正に失敗しました!")

} else Print("Error opening Buy order");

}

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

//| 専門家による初期化機能

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

int init()

{

//--------


//--------

を返します(0)。

}

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

//| エキスパートティック機能

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

void OnTick()

{

PriceHigh = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 1, 0)です。

PriceLow = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 2, 0)です。

if(CountSell() == 0 && Bid >= PriceHigh)

{

ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "TMA robot", 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("売り注文の修正に失敗しました!")

} else Print("売り注文の開始でエラー!")

}

if (CountBuy() == 0 && Ask <= PriceLow)

{

ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "TMA robot", Magic, 0, Blue)です。

{

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("買い注文の修正に失敗しました!")

} else Print("Error opening Buy order");

}

if (Ask <= PriceLow && CountSell() > 0)

{

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(), Ask, Slippage, Black))

Print("売り注文終了エラー!")

}

}

}

if (Bid >= PriceHigh && CountBuy() > 0)

{

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(), Bid, Slippage, Black))

Print("OrderClose買いエラー!")

}

}

}

}

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

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)です。

}

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

//| 専門家による初期化関数

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

int deinit()

{

//+-------


//+-------

返す

}

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

//| エキスパートスタート機能

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

int Start()

{

//-----

bool error = fals;

if (LBT!=Time[0]) { { { (LBT!

if (OrdersTotal()!=0){。

for (int i=0; i<OrdersTotal(); i++){

if (OrderSelect(i,SELECT_BY_POS)&&OrderSymbol()==Symbol()&&OrderType()<2) {。

double SL = OrderStopLoss();

if OrderType()==0) { {.

switch (TralType) {

case 0: SL = iSAR(NULL,0,SAR_Step,SAR_Max,0);

が壊れる。

ケース1:SL = High[1] - iATR(NULL,0,ATR,Period,1)*ATR_K;

が壊れる。

case 2: SL = iCustom(NULL,0, "VinI_HMAsound&amp",HMA_Period,HMA_Method,3,HMA_Shift, fals,fals,",1,0,0);

が壊れる。

}

if (SL<OrderStopLoss())

SL = OrderStopLoss()。

}

if (OrderType()==1)の場合{。

switch (TralType) {

case 0: SL = iSAR(NULL,0,SAR_Step,SAR_Max,0);

が壊れる。

ケース1:SL = Low[1] + iATR(NULL,0,ATR,Period,1)*ATR_K;

が壊れる。

case 2: SL = iCustom(NULL,0, "VinI_HMAsound&amp",HMA_Period,HMA_Method,3,HMA_Shift, fals,fals,",1,0,0);

が壊れる。

}

if (SL>OrderStopLoss())

SL = OrderStopLoss()。

}

if (SL!=OrderStopLoss()の場合){

if(!OrderModify(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0))

error = true とする。

}

}

}

}

if (!エラー)

LBT = Time[0];

}

を返します(0)。

}

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

 
vkravtzov:

コードの挿入 方法を学ぼう!!!


コードの挿入を覚えよう!!!


コードの挿入方法を学ぼう!!!


コードの挿入方法を学ぼう!!!


コードの挿入方法を学ぼう!!!


コードの挿入方法を学ぼう!!!


コードの挿入方法を学ぼう!!!


コードの挿入方法を学ぼう!!!


コードの挿入方法を学ぼう!!!


コードの挿入を覚えよう!!!

 
vkravtzov: Expert Advisorにトレーリングストップ機能を追加し、テストしたところ、2つのエラーが発生したのですが、理解できますか?- 脳みそが割れてしまった、どうしたら治るのかわからない。しかし、取引は旧来の戦略に従って、価格がチャンネルの上限と下限にそれぞれタッチした後に終了します。ここでも何かを変えなければならないのでしょう。- dnrの軍隊の連中に呼び戻す。

手伝うことにした。しかし、作者に質問が あります。2つの初期化関数がありますが、これは何をするものなのでしょうか?

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
   if (Digits == 3 || Digits == 5)
   {
   TakeProfit *= 10;
   StopLoss   *= 10;
   Slippage   *= 10;
   }
   return(INIT_SUCCEEDED);
}


//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//--------
//--------
    return (0);
    }

2つのOnTick()関数と 3つ目の関数int Start()があり、これらはすべてティックの到着とともに実行されます。また、端末はどのような順番で起動するのでしょうか?

エラー:OnTick()関数の 最後に閉じ角括弧がありません。

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
  PriceHigh = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 1, 0);
  PriceLow  = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 2, 0);
  if(CountSell() == 0 && Bid >= PriceHigh)
  {
     ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "TMA robot", 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 (CountBuy() == 0 && Ask <= PriceLow)
  {
     ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "TMA robot", 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("Ошибка модификации ордера на покупку!");
     }   else Print("Ошибка открытия ордера на покупку");
   }
}    // Эту скобку добавил !!!!!!!!!!!!!!!!!!!!!!!!!

これで、コンパイラは8つのエラーを検出しました。削除しました。

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//--------
//--------
    return (0);
    }


//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
{
//+-------
//+-------
   return (0);
   }

現在、7つのエラーがあります。

if(OrderType()==0)の後に括弧を付けて置き換えました: if(OrderType()==0) - 8つのエラーが発生しました。

iATR(NULL,0,ATR,Period,1) - 必要です iATR(NULL,0,ATR_Period,1) - 2つのエラーが発生しました。

bool error = fals; が必要である。 bool error = false; - エラー数は3個になった。

VininI_HMAsound&ampのインジケータはどこで手に入りますか? どんなパラメータがありますか? = エラーになるのはまだ1です。

また、なぜ3カ所で質問をするのですか?

 

ヘルプダウンロードとインストール無料EAsと信号のMT4にはないneemoguとしてダウンロードビデオのみをインストールする方法が、ないダウンロード。どこを見ればいいのか教えてください

 
vovik36 Степанов:

ヘルプダウンロードとインストール無料EAsと信号のMT4にはないneemoguとしてダウンロードビデオのみをインストールする方法が、ないダウンロード。どこを見ればいいのかアドバイスしてください。

まず卒業して、それから来てください。

 
Artyom Trishkin:

どうですか?


   for(i=pos; i<rates_total && !IsStopped(); i++)
     {
      double dmin=1000000.0;
      double dmax=-1000000.0;
      for(k=i-InpKPeriod+1; k<=i; k++)
       {double ima=iMA(Symbol(),1,60,0,1,0,k);
         if(dmin>ima)  dmin=ima;
         if(dmax<ima)  dmax=ima;
                   Comment(ima);
        }
      ExtLowesBuffer[i]=dmin;
      ExtHighesBuffer[i]=dmax;
     }

こんにちは。ima=iMA(Symbol(),1,60,0,1,0,k) が表示されないのですが、どうしてでしょうか?コメントには、ラインそのものよりもはるかに高い引用が表示されます。最小値、最大値が正しく計算されないのはそのせいです。

 
Rustam Bikbulatov:

こんにちは。ima=iMA(NULL,60,24,0,1,0,k) が表示されないのですが、どうしてでしょうか?コメントを通して、回線そのものよりもはるかに高い引用度を示しています。このため、最小値、最大値が正しく計算されない。

iMAは時系列のようにナンバリングされており、0が最も関連性の高い数字です。あなたの場合はその逆かもしれません
 
Maxim Kuznetsov:
iMAは時系列のようにナンバリングされており、0が最も関連性の高い数字です。そして、おそらくその逆もあることでしょう。

意図しない賭けに出てしまうのです。何も変わらないんです。まさに、kと間違って表示されるのがポイントです!