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

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

MakarFX さん、ありがとうございます...。コンパイル時に以下のエラーが発生します。

'CounterOrderTradeType' - function not defined test for many expt trade.mq4 48 19

'CounterOrderTradeType' - 関数宣言は、グローバル、ネームスペース、またはクラススコープでのみ許可されます test for many expt trade.mq4 141 5


黄色のハイライトを修正する


 //+------------------------------------------------------------------+
//|                                                   sova_2bars.mq4 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

extern int Magic = 64777;
extern double Lot = 0.01;
extern int Slippage = 3;
extern int TakeProfit = 1600;
extern int StopLoss = 800;
extern int Experation = 0; 

int OrderOfSymbol;
//+------------------------------------------------------------------+
....
 //+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  { 
  OrderOfSymbol=CounterOrderTradeType(-1);

...

//-------------функции---------------------------------------

if ( Ask>0 && Bid >0)
   {

 if (OrderOfSymbol<1)
    if (Close[1]>Open[1])
    if(Bears < -0.00035 && MiddleBB > Ask)
         {
    ticket = OrderSend(Symbol(),OP_BUY, Lot, Ask, Slippage, SLbuy, TPbuy, "открыт ордер на покупку", Magic, 0, Blue);
         }
         
   
if (OrderOfSymbol==1)
   if(Bulls > 0.00035 && MiddleBB < Ask && Bears > 0 && Opentwo < Closetwo && Openthree < Closethree && BigTrand < Ask)
    CloseBuyPositions1();
   } 
//+------------------------------------------------------------------+
//| Подсчет ордеров потекущему символу                               |
//+------------------------------------------------------------------+
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) continue;
      if(order_type == OrderType() || order_type == -1) cnt++;
      }
   //----
   return(cnt);
   }
 
MakarFX:

黄色で囲った部分を修正する。


このセグメントのせいだと気づき、変数を再定義しようとしましたが、うまくいきませんでした。mql4なので(5には詳しくないので、違いがあれば)、またお願いします
 
Порт-моне тв:
このセグメントのせいだと気づき、変数を再定義しようとしましたが、うまくいきませんでした。mql4なんですが(mql5には詳しくないので違いがあれば)、またよろしくお願いします。
取得したコードを教えてください、何が問題か調べます。
 
MakarFX:
取得したコードを教えてください、何が問題か調べます。
//+------------------------------------------------------------------+
//| sova_2bars.mq4||←こちらをクリック
| Copyright 2020, MetaQuotes Software Corp.
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp.
#プロパティリンク "https://www.mql5.com"
#property version "1.00"
#プロパティの厳密さ

extern int Magic = 6477;
extern double Lot = 0.01;
extern int Slippage = 3;
extern int TakeProfit = 1600;
extern int StopLoss = 800;
extern int Experation = 0;

double Openone, //最初のローソク足の始値
Opentwo, //ローソク足2本目の始値
Closeone, //最初のローソク足の終値
Closetwo、//2本目のキャンドルのシーン
Lowone, //最初のローソクの最低価格
Lowtwo, //最初のローソク足の価格
ロースリー、//3本目のキャンドルの最小値のシーン
Openthree, //ローソク足3本目の始値
Closethree, //ローソク足3本目の終値
CloseOrder, //クローズオーダー
Highone, //ローソク足1本目の最高値
Hightwo, //ローソク足2本目の最大値
Highhree, //ローソク足2本目の最大値
Highfour, //価格は2本目のローソク足の最大値です。
ハイファイブ、//2本目のロウソクの最大値
Highsix, //最大2本目のローソクの価格。
Highseven, //最大2本目のローソク足の価格
高値、//2本目のローソクの最大値
Lowfour, //4本目のロウソクの最小値の価格
Lowfive, //5本目のローソクの初値
ロウソク、//6本目のロウソクの最短距離のシーン
Lowseven、//最低7本のロウソクを立てるシーン
Loweight、//8本目のキャンドルの最小値のシーン
Closefour, //ローソク足4本目の終値
オープンフォー
Low15です。
Low25です。
SLbuy、TPbuy、SLsell、TPsell、//ローソク足4本目の始値
OrderOpenPrice;
int ticket, ticketclose;
int OrderOfSymbol。

//+------------------------------------------------------------------+
//| 専門家による初期化機能
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| 専門家による初期化関数
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| エキスパートティック機能
//+------------------------------------------------------------------+
void OnTick()
{
OrderOfSymbol=CounterOrderTradeType(-1)です。
//--- 必要なバーの価格を決定する
Openone = NormalizeDouble(iOpen(Symbol(), Period(), 0), Digits)です。
Highone = NormalizeDouble(iHigh(Symbol(), Period(), 0), Digits)とする。
Hightwo = NormalizeDouble(iHigh(Symbol(), Period(), 1), Digits)とする。
Highthree = NormalizeDouble(iHigh(Symbol(), Period(), 2), Digits)とする。
Highfour = NormalizeDouble(iHigh(Symbol(), Period(), 3), Digits)とする。
Highfive = NormalizeDouble(iHigh(Symbol(), Period(), 4), Digits)とする。
Highsix = NormalizeDouble(iHigh(Symbol(), Period(), 5), Digits)とする。
Highseven = NormalizeDouble(iHigh(Symbol(), Period(), 6), Digits)とする。
Highheight = NormalizeDouble(iHigh(Symbol(), Period(), 7), Digits)とする。
Opentwo = NormalizeDouble(iOpen(Symbol(), Period(), 1), Digits);
Openthree = NormalizeDouble(iOpen(Symbol(), Period(), 2), Digits);
Openfour = NormalizeDouble(iOpen(Symbol(), Period(), 3), Digits)です。
Closeone = NormalizeDouble(iClose(Symbol(), Period(), 0), Digits)です。
Closetwo = NormalizeDouble(iClose(Symbol(), Period(), 1), Digits)です。
Closethree = NormalizeDouble(iClose(Symbol(), Period(), 2), Digits)とする。
Closefour = NormalizeDouble(iClose(Symbol(), Period(), 3), Digits)です。
Lowone = NormalizeDouble(iLow(Symbol(), Period(), 0), Digits)とする。
Lowtwo = NormalizeDouble(iLow(Symbol(), Period(), 1), Digits)です。
Lowthree = NormalizeDouble(iLow(Symbol(), Period(), 2), Digits)とする。
Lowfour = NormalizeDouble(iLow(Symbol(), Period(), 3), Digits)です。
Lowfive = NormalizeDouble(iLow(Symbol(), Period(), 4), Digits)とする。
Lowix = NormalizeDouble(iLow(Symbol(), Period(), 5), Digits);
Lowseven = NormalizeDouble(iLow(Symbol(), Period(), 6), Digits)とする。
Low15 = NormalizeDouble(iLow(Symbol(), Period(), 14), Digits)とする。
Low25 = NormalizeDouble(iLow(Symbol(), Period(), 24), Digits)とする。

//----индикатор - условия--------------------------------------


double BigTrand = iMA(NULL, 0,50,0,MODE_SMA, PRICE_CLOSE, 1);
double SmallTrand = iMA(NULL, 0,5,0,MODE_SMA, PRICE_CLOSE, 1);
double LowerBB = iBands(_Symbol,_Period,17,1,0,PRICE_CLOSE,MODE_LOWER,1)とする。
double UpperBB = iBands(_Symbol,_Period,17,1,0,PRICE_CLOSE,MODE_UPPER,1)です。
double MiddleBB = iBands(_Symbol,_Period,17,1,0,PRICE_CLOSE,MODE_MAIN,1)です。
double Bears = iBearsPower(_Symbol,_Period,5, PRICE_CLOSE,0)。
double Bulls = iBullsPower(_Symbol,_Period,5, PRICE_CLOSE,0)。
double Parab = iSAR(_Symbol,_Period,0.002, 1, 0);

SLbuy = NormalizeDouble(Ask - StopLoss*Point, 5)。
TPbuy = NormalizeDouble(Ask + TakeProfit*Point, 5)。
SLsell = NormalizeDouble(Bid + StopLoss*Point, 5)。
TPsell = NormalizeDouble(Bid - TakeProfit*Point, 5)。


//-------------функции---------------------------------------




if ( アスク>0 && ビッド>0)
{

if (注文合計()<1))
if (クローズ[1]>オープン[1])
if(Ask>LowerBB)の場合
{
ticket = OrderSend(Symbol(),OP_BUY, Lot, Ask, Slippage, SLbuy, TPbuy, "openbuy order", Magic, 0, Blue)
}
if(OrdersTotal()==1)
if(ビッド>アッパーBB)
CloseBuyPositions1()。
}

//+------------------------------------------------------------------+
//|オーダーカウント|
//+------------------------------------------------------------------+
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);
}


//---- 関数終了
}
//---------------------------------------------------------------------
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)
{
OrderClose(OrderTicket(), OrderLots(), Bid, 3, NULL);
}
}
}




Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
One Click Close The script allows users to easily close positions if their profit/loss reaches or exceeds a value specified in pips. Please set slippage value first. Sometimes some positions do not close due to high volatility of the market. Please set larger slippage or restart the script. The free demo version is: ...
 
Порт-моне тв:

括弧の間違い ...キャッチ

 //+------------------------------------------------------------------+
//|                                                   sova_2bars.mq4 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

extern int Magic = 64777;
extern double Lot = 0.01;
extern int Slippage = 3;
extern int TakeProfit = 1600;
extern int StopLoss = 800;
extern int Experation = 0;

double Openone,    //цена открытия первой свечи
Opentwo,    //цена открытия второй свечи
Closeone,   //цена закрытия первой свечи
Closetwo,   //цена закрытия второй свечи
Lowone,     //цена минимальная первой свечи
Lowtwo,     //цена минимальная второй свечи
Lowthree,   //цена минимальная третьей свечи
Openthree,  //цена открытия третьей свечи
Closethree, //цена закрытия третьей свечи
CloseOrder, //закрыть ордер
Highone,    //цена максимальная первой свечи
Hightwo,    //цена максимальная второй свечи
Highthree,    //цена максимальная второй свечи
Highfour,    //цена максимальная второй свечи
Highfive,    //цена максимальная второй свечи
Highsix,    //цена максимальная второй свечи
Highseven,    //цена максимальная второй свечи
Higheight,    //цена максимальная второй свечи
Lowfour,    //цена минимальная четвертой свечи
Lowfive,    //цена минимальная пятой свечи
Lowsix,    //цена минимальная шестой свечи
Lowseven,    //цена минимальная седьмой свечи
Loweight,    //цена минимальная восьмой свечи
Closefour,  //цена закрытия четвертой свечи
Openfour,
Low15,
Low25, 
SLbuy, TPbuy,  SLsell, TPsell,   //цена открытия четвертой свечи
OrderOpenPrice;
int ticket, ticketclose; 
int OrderOfSymbol;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
  OrderOfSymbol=CounterOrderTradeType(-1); 
//--- определение цен необходимых баров
   Openone = NormalizeDouble(iOpen(Symbol(), Period(), 0), Digits);
   Highone = NormalizeDouble(iHigh(Symbol(), Period(), 0), Digits);
   Hightwo = NormalizeDouble(iHigh(Symbol(), Period(), 1), Digits);
   Highthree = NormalizeDouble(iHigh(Symbol(), Period(), 2), Digits);
   Highfour = NormalizeDouble(iHigh(Symbol(), Period(), 3), Digits);
   Highfive  = NormalizeDouble(iHigh(Symbol(), Period(), 4), Digits);
   Highsix  = NormalizeDouble(iHigh(Symbol(), Period(), 5), Digits);
   Highseven = NormalizeDouble(iHigh(Symbol(), Period(), 6), Digits);
   Higheight = NormalizeDouble(iHigh(Symbol(), Period(), 7), Digits);
   Opentwo = NormalizeDouble(iOpen(Symbol(), Period(), 1), Digits);
   Openthree = NormalizeDouble(iOpen(Symbol(), Period(), 2), Digits);
   Openfour = NormalizeDouble(iOpen(Symbol(), Period(), 3), Digits);
   Closeone = NormalizeDouble(iClose(Symbol(), Period(), 0), Digits);
   Closetwo = NormalizeDouble(iClose(Symbol(), Period(), 1), Digits);
   Closethree = NormalizeDouble(iClose(Symbol(), Period(), 2), Digits);
   Closefour = NormalizeDouble(iClose(Symbol(), Period(), 3), Digits);
   Lowone = NormalizeDouble(iLow(Symbol(), Period(), 0), Digits);
   Lowtwo = NormalizeDouble(iLow(Symbol(), Period(), 1), Digits);
   Lowthree = NormalizeDouble(iLow(Symbol(), Period(), 2), Digits);
   Lowfour = NormalizeDouble(iLow(Symbol(), Period(), 3), Digits);
   Lowfive = NormalizeDouble(iLow(Symbol(), Period(), 4), Digits);
   Lowsix = NormalizeDouble(iLow(Symbol(), Period(), 5), Digits);
   Lowseven = NormalizeDouble(iLow(Symbol(), Period(), 6), Digits);
   Low15 = NormalizeDouble(iLow(Symbol(), Period(), 14), Digits);
   Low25 = NormalizeDouble(iLow(Symbol(), Period(), 24), Digits);

     
//----индикатор - условия--------------------------------------


double BigTrand = iMA(NULL, 0,50,0,MODE_SMA, PRICE_CLOSE, 1);
double SmallTrand = iMA(NULL, 0,5,0,MODE_SMA, PRICE_CLOSE, 1);
double LowerBB = iBands(_Symbol,_Period,17,1,0,PRICE_CLOSE,MODE_LOWER,1);
double UpperBB = iBands(_Symbol,_Period,17,1,0,PRICE_CLOSE,MODE_UPPER,1);
double MiddleBB = iBands(_Symbol,_Period,17,1,0,PRICE_CLOSE,MODE_MAIN,1);
double Bears = iBearsPower(_Symbol,_Period, 5, PRICE_CLOSE,0);
double Bulls = iBullsPower(_Symbol,_Period, 5, PRICE_CLOSE,0);
double Parab = iSAR(_Symbol,_Period,0.002, 1, 0);

SLbuy = NormalizeDouble(Ask - StopLoss*Point, 5); 
TPbuy = NormalizeDouble(Ask + TakeProfit*Point, 5);
SLsell = NormalizeDouble(Bid + StopLoss*Point, 5); 
TPsell = NormalizeDouble(Bid - TakeProfit*Point, 5);


//-------------функции---------------------------------------
            
if ( Ask>0 && Bid >0)
   {

 if (OrdersTotal()<1)
    if (Close[1]>Open[1])
    if(Ask>LowerBB)
         {
    ticket = OrderSend(Symbol(),OP_BUY, Lot, Ask, Slippage, SLbuy, TPbuy, "открыт ордер на покупку", Magic, 0, Blue);
         }
         
   
if (OrdersTotal()==1)
   if(Bid>UpperBB)
    CloseBuyPositions1();
   }
}
//----конец функции
//---------------------------------------------------------------------
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) continue;
      if(order_type == OrderType() || order_type == -1) cnt++;
      }
   //----
   return(cnt);
   }   
       
 
Порт-моне тв:

そこが理解できないのです。

if ( Ask>0 && Bid >0)

なんで

 
MakarFX:

そこが理解できないのです。

なんで

このようにすることで、すべての括弧で追加の関数を書く必要がなくなり、この関数で、この一般的に理解されている値を変更して指標を実験することができます。
 
Порт-моне тв:
を追加する必要がないように、一般的な関数も追加し、この関数で指標を実験しています。

私ならこうする

//-------------функции---------------------------------------
            
 if (OrderOfSymbol<1)
    if (Close[1]>Open[1])
      if(Ask>LowerBB)
         {
         if(OrderSend(Symbol(),OP_BUY, Lot, Ask, Slippage, SLbuy, TPbuy, "открыт ордер на покупку", Magic, 0, Blue)){Print("Buy Order Open");}
         }
         
   for(int pos=0;pos<OrdersTotal();pos++)
      if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES))
         if(OrderSymbol()==_Symbol)
            if(Bid>UpperBB)
               CloseBuyPositions1();
   }
//----конец функции
 
MakarFX:

Мне вот это не понятно

зачем?


問題は解決されていない、1つのチャート上の順序を開き、第二にしたくない、明らかにすべての上に再びOrdersTotalを 数える(何か魔術師が変更された場合、さらに別のEAをコンパイルする)

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

問題は解決されていない、1つのチャート上の順序を開き、第二にしたくない、カウントOrdersTotal明らかにすべての上に再び(何も魔術師が変更された場合、さらに別の顧問をコンパイル した場合)

私の投稿にあった関数を入れてください。私には効果があります