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

 

Expert Advisorを終了できない。まず、価格がその領域に入った場合の買いトリガーとなる長方形を1つ描き、次に2つ目の長方形を描きます。

しかし、その逆に、価格がその領域内で開いたり閉じたりし始めるのです。私は何を間違えているのだろう?


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

//| RECTANGLES OP_BUY.mq4||RECTANGLES OP_BUY.mq4

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

#property copyright ""

#プロパティリンク ""

#property version "1.00"

#プロパティの厳密さ


extern int Magic = 777701;

extern double Lot = 0.01;

extern int Slippage = 3;



int ticketです。

int OrderOfSymbol。




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

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

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

int OnInit()

{

//---

return(INIT_SUCCEEDED);

}

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

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

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

void OnDeinit(const int reason)

{

//---

}

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

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

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

void OnTick()

{

//---

//Check for therectangle:

if(ObjectsTotal(OBJ_RECTANGLE)==0)とする。

{コメント("長方形を描いて 買い取引を開始します!");}。


//矩形のNAMEを取得します。

for(int n=0;n<ObjectsTotal();n++)

{

文字列名=ObjectName(n);

if(ObjectType(name)==OBJ_RECTANGLE)とする。

{

datetime t1a = (datetime) ObjectGet(name,OBJPROP_TIME1)。

datetime t2a = (datetime) ObjectGet(name,OBJPROP_TIME2)。


double p1a=NormalizeDouble(ObjectGet(name,OBJPROP_PRICE1),Digits);

double p2a=NormalizeDouble(ObjectGet(name,OBJPROP_PRICE2),Digits);

OrderOfSymbol=CounterOrderTradeType(-1)です。

if (OrderOfSymbol<1)

if (クローズ[1]>オープン[1])

if(TimeCurrent()>t1a && TimeCurrent()<t2a &&)

ビッド < p1a && ビッド > p2a )

{

ticket = OrderSend(Symbol(,OP_BUY, Lot, Ask, Slippage, 0, 0, "open buy order", Magic, 0, Blue)。

}

}

}

//Check if there is already secondrectangle:

if(ObjectsTotal(OBJ_RECTANGLE)==1)

{Comment("2つ目の矩形を描いて 買い取引を終了します!");}。


//矩形のNAMEを取得します。

for(int n=0;n<ObjectsTotal();n++)

{

文字列名=ObjectName(n);

if(ObjectType(name)==OBJ_RECTANGLE)とする。

{

datetime t1b = (datetime) ObjectGet(name,OBJPROP_TIME1)。

datetime t2b = (datetime) ObjectGet(name,OBJPROP_TIME2)。


double p1b=NormalizeDouble(ObjectGet(name,OBJPROP_PRICE1),Digits);

double p2b=NormalizeDouble(ObjectGet(name,OBJPROP_PRICE2),Digits);


if(TimeCurrent()>t1b && TimeCurrent()<t2b &&)

ビッド < p1b && ビッド > p2b )

CloseBuyPositions1()。

}

}

/Cすでに2番目の矩形が あるかどうか確認する :

if(ObjectsTotal(OBJ_CHANNEL)==2)

{コメント("買い注文の開始と終了エリアが設定されました - 取引開始です!");}。


}

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

void CloseBuyPositions1()

{

for(int i = OrdersTotal() - 1; i >= 0; i--)

if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

if(OrderMagicNumber() == Magic)

if(OrderSymbol() == Symbol())

{



if(OrderType()==OP_BUY)

{

if(OrderClose(OrderTicket(), OrderLots(), Bid, 3, NULL)){Print("Order Close");}; }.

}

}

}

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

//|オーダーカウント|

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

int CounterOrderTradeType(ENUM_ORDER_TYPE order_type)

{

int cnt=0;

//----

for(int pos=OrdersTotal()-1;pos>=0;pos--)

{

if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)==false) continue;

if(OrderSymbol()!=_Symbol)を続ける。

if(order_type == OrderType() || order_type == -1) cnt++;

}

//----

return(cnt);

}

 
Порт-моне тв:

このようなコードを投稿する機能があります、あなたのコードを読んでみんなが手助けしやすくなりますよ。

 
MakarFX:

このようなコードを投稿する機能があります、あなたのコードを読んでみんなが手助けしやすくなると思います。

それは彼のためになりません。空白行は、彼のような人にしか読めない。

 

Порт-моне тв:

私は何を間違えているのだろう?

スクウェアの名前に独自性がない、売買の条件としてどんなスクウェアでも持っている

 
Порт-моне тв:

また、これにより


 

エラーを修正する方法を教えてください

//+------------------------------------------------------------------+
#property copyright   "Copyright 2020,"
#property version     "1.0"
#property strict

//--- Inputs
int   side_position                    = 1;
input ENUM_BASE_CORNER  CornerInfo     = CORNER_RIGHT_UPPER; 
input ENUM_BASE_CORNER  CornerInfo1    = CORNER_LEFT_UPPER; 
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   if(side_position == 2)
   {
   CornerInfo  = CORNER_RIGHT_LOWER; 
   CornerInfo1 = CORNER_LEFT_LOWER;
   }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+

以下はそのエラーです。

'CornerInfo' - constant cannot be modified      Wa.mq4  22      1
'CornerInfo1' - constant cannot be modified     Wa.mq4  23      1
2 errors, 0 warnings            3       1
 
Forallf:

ありがとうございました。

どういたしまして )

MakarFX:

エラーを修正する方法を教えてください。

以下はエラーです。

入力変数の 変更はできません。

こんな風にできるんですね。

input ENUM_BASE_CORNER  CornerInfo     = CORNER_RIGHT_UPPER; 

ENUM_BASE_CORNER  MyCornerInfo     = CornerInfo; 


.......

if(side_position == 2)
   {
   MyCornerInfo  = CORNER_RIGHT_LOWER; 



 
Aleksei Stepanenko:

どういたしまして )

入力変数を 変更することはできません。

こんな風にできるんですね。

ありがとう、わかったよ

 
MakarFX:

これはあなたにも役立つはずです。


そうではありませんでした。そして、二乗の値が本来あるべき2つからではなく、最後の1つから取られていることに気づいたのです。どうやったら勝てるのかわからない。自分では気づかなかっただろう。私はmqlに精通しているわけではありません。だからここで質問しているのですが、あなたは私にコムを提供してくれています。

 
Порт-моне тв:

は役に立たなかった。そして、二乗の値が本来あるべき2つからではなく、最後の1つから取られていることに気づいたのです。どうやったら勝てるのかわからない。自分では想像もつかなかった。私はmqlに精通しているわけではありません、だからあなたに聞いているのです、あなたは私に櫛を提供しています。

私は、あなたがアドレスする人がコードを読みやすくするために、あなたに櫛を提供しています(ここに悪意はありません)。

正方形については、正方形を正しく認識するためには、その起源を理解する必要があります。