初心者の方からの質問 MQL4 MT4 MetaTrader 4 - ページ 255

 
Mihail Matkovskij #:

tpはどのように計算するのですか?

変数に double tp=50 を指定しています。

 
Roman Epifanov #:

変数に double tp=50 を指定しています。

double takeProfit;
takeProfit = NormalizeDouble(Bid - tp * Point(), Digits()); // TP для Sell
 
Mihail Matkovskij #:

扨措き

2021.12.04 13:56:09.509 TestGenerator: unmatched data error (high value 1.13110 at 2021.12.03 23:45 is not reach from lowest timeframe, high price 1.13104 mismatches.).


//+------------------------------------------------------------------+
//|                                                         repa.mq4 |
//|                        Copyright 2021, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   int i;
   double lot_sum;
   bool trend;
   double ema;
   double sl=50.0,tp=50.0;
   tp = NormalizeDouble(Bid - tp * Point(), Digits()); // TP для Sell
   double lot=0.01;
   while (i<OrdersTotal())
   {
   OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
   lot_sum=lot_sum + OrderLots(); // сумма лотов открытых позиций
   
   
   }
   
   ema=iMA(NULL,0,50,0,MODE_EMA,PRICE_CLOSE,0); //взяли значение средней
   if (Close[0]<ema)trend=true ;else if(Close[0]>ema)trend=false; //определили тренд
   
   if (Close[1]<Open[1]) {OrderSend(Symbol(),OP_SELL,lot,Bid,2,Ask+sl,tp,"Candle sell, Close[0]<MA");};
   
   
  }
//+------------------------------------------------------------------+
 
Mihail Matkovskij #:

をちょっとつけてみると...効く...。

が、停止位置が違う

1 2021.09.16 05:59 売り 1 0.01 1.18190 51.18192 1.18140 0.00 10000.00


 
Roman Epifanov #:

扨措き

2021.12.04 13:56:09.509 TestGenerator: unmatched data error (high value 1.13110 at 2021.12.03 23:45 is not reach from lowest timeframe, high price 1.13104 mismatches.).


void OnTick()
  {
//---
   int i;
   double lot_sum;
   bool trend;
   double ema;
   double sl=50.0,tp=50.0;
   double stopLoss, takeProfit, openPrice;
   double lot=0.01;
   while (i<OrdersTotal())
   {
     OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
     lot_sum=lot_sum + OrderLots(); // сумма лотов открытых позиций
   
   }
   
   ema=iMA(NULL,0,50,0,MODE_EMA,PRICE_CLOSE,0); //взяли значение средней

   if (Close[0]<ema)
     trend=true ;
   else if(Close[0]>ema)
     trend=false; //определили тренд
    
   takeProfit = NormalizeDouble(Bid - tp * Point(), Digits()); // TP для Sell
   stopLoss = NormalizeDouble(Bid + sl * Point(), Digits()); // SL для Sell
   openPrice = NormalizeDouble(Bid, Digits());

   if (Close[1]<Open[1]) {
     OrderSend(Symbol(), OP_SELL, lot, openPrice, 2, stopLoss, takeProfit, "Candle sell, Close[0]<MA");
   }
   
  }

ルールはすべてオンラインで公開されているので、ご自身で確認してください。

 
Mihail Matkovskij #:

ルールはすべてオンラインで確認できますので、ご自身でお確かめください。

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

 

こんばんは。2つ目の注文を開くときにアドバイザーがエラーを出すのはなぜか、アドバイスをお願いします。


アドバイザーの文章そのもの



//+----------------------Параметры-----------------------------------+

input int TakeProfit = 100; // 利益をpipsで表示します。

input int StopLoss = 50; // 損失額(ピップス単位

input double Lot = 0.01; // スタートロット

input double Multilot = 1.95; // 開始ロットの倍率

input int Slippage =30; // スリッページ

input int MagicNumber = 333 ; // 一意な数字


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

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

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

double tp=0;

double sl=0;

int OnInit()

{

tp=NormalizeDouble(TakeProfit*Point(),Digits())です。

sl=NormalizeDouble(StopLoss*Point(),Digits())です。

return(INIT_SUCCEED);

}


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

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

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

void OnTick()

{

//--Expert Advisor がアクティブになったときに、ループは未決済注文をチェックし、それらを計算します。

int buy=0; //買い注文の数

int sell=0; //SELL(売り)注文の数


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

if(OrderSelect(i, SELECT_BY_POS,MODE_TRADES))

if(OrderSymbol()==Symbol())とする。

if(OrderMagicNumber()== MagicNumber)

{

if(OrderType()==OP_BUY)

買う++。

if(オーダータイプ()==OP_SELL)

を売る++。

}


//--EA起動時に最後に決済された注文のデータを取得するループです。

int type=-1; //閉じたオーダーのタイプ

int history_close_orders=0; //クローズしたオーダーの数

double lot=0; //最後に決済された注文のロット

double profit=0; //最後の注文が決済されたときの利益額

datetime time=0; //最終注文の締切時間


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

if(OrderSelect(i, SELECT_BY_POS,MODE_HISTORY))

if(OrderSymbol()==Symbol())とする。

if(OrderMagicNumber()== MagicNumber)

if(OrderCloseTime()>時間)

{

history_close_orders++;

time = OrderCloseTime();//最後の注文の終了時刻

lot= OrderLots();//最後に決済された注文のロット

type=OrderType();//最後に決済された注文の種類

profit=OrderProfit()*OrderSwap()*OrderCommission();//最後に決済された注文の利益額

}

//EAが動作するロットを計算します。

double Lots_Work=0;// 作業ロット


if(history_close_orders==0 || profit>0)// 引けた注文がない、または最後の注文が利益で引けた場合。

Lots_Work=Lot;//作業ロットは初期ロットと同じです。


if(history_close_orders>0 && profit<0) // 最後の注文が赤で決済された場合

Lots_Work=1;// 作業ロットは、最後の注文のロットに倍率を掛けたものになります。


//最初の買い注文を出す

if(買い=0 || 利益>0)

{

int ticket=OrderSend(Symbol(,OP_BUY,Lots_Work,Ask,Slippage,0,0, "Expert Advisor Test fair",MagicNumber,0,clrGreen));

if(チケット<0)

Print("OrderSendはエラー#で失敗しました",GetLastError());

さもなくば

Print("OrderSendが正常に完了しました");

}


// 2回目以降の買い注文の開始

if(buy==0 && type==OP_BUY && profit<0)

{

int ticket=OrderSend(Symbol(),OP_BUY,Lots_Work,Ask,Slippage,0,0, "EA Test fair",MagicNumber,0,clrGreen);

if(チケット<0)

Print("OrderSendはエラー#で失敗しました",GetLastError());

さもなくば

Print("OrderSendが正常に完了しました");

}


// 最初の売り注文の 開始

if(sell==0 || profit>0)

{

int ticket=OrderSend(Symbol(),OP_SELL,Lots_Work,Bid,Slippage,0,0, "EA Test fair",MagicNumber,0,clrRed);

if(チケット<0)

Print("OrderSendはエラー#で失敗しました",GetLastError());

さもなくば

Print("OrderSendが正常に完了しました");

}

// 2回目以降の買い注文の開始

if(sell==0 && (type==OP_SELL && profit<0)))

{

int ticket=OrderSend(Symbol(),OP_SELL,Lots_Work,Bid,Slippage,0,0, "Expert Advisor Test fair",MagicNumber,0,clrRed)。

if(チケット<0)

Print("OrderSendはエラー#で失敗しました",GetLastError());

さもなくば

Print("OrderSendが正常に完了しました");

}


//--テイクプロフィット、ストップロスを追加して注文を変更する。

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

if(OrderSelect(i, SELECT_BY_POS))

if(OrderSymbol()==Symbol())とする。

if(OrderMagicNumber()== MagicNumber)

{

if(OrderType()==OP_BUY)

{

if(OrderStopLoss()==0 || OrderTakeProfit()==0))

if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()-sl,Digits(),NormalizeDouble(OrderOpenPrice()+tp,Digits(), 0,clrGreen)))。

Print("OrderModify OK!");

さもなくば

Print("OrderModify BUY failed #", GetLastError());

}

if(オーダータイプ()==OP_SELL)

{

if(OrderStopLoss()==0 || OrderTakeProfit()==0))

if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()+sl,Digits(),NormalizeDouble(OrderOpenPrice()-tp,Digits(),0,clrRed)))

Print("OrderModify OK!");

さもなくば

Print("OrderModify SELL failed #", GetLastError());

}

}


}

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


 
私の古いi3プロセッサ搭載のノートパソコンには、まだWinXP 32bitがインストールされており、未対応のMT5が搭載されていました。最近、メモリを6GBに増設したので、MT4とMT5が動く64bitOSをインストールしたい。Win7とWin8.1ではどちらが良いですか?
 
atztek #:
私の古いi3プロセッサ搭載のノートパソコンには、まだWinXP 32bitがインストールされており、未対応のMT5が搭載されていました。最近、メモリを6GBに増設したので、MT4とMT5が動く64bitOSをインストールしたい。Win7とWin8.1ではどちらが良いですか?

10

 
Andrey Sokolov #:

10

このバージョンは、新しいノートパソコンにインストールされており、一定のアップデートに疲れています。それに、古いノートパソコンでは10より8の方がよく動くと書かれています。古いノートパソコンにWinXPを残しておきたいのですが、MT5では動きませんし、ましてやXPではメモリが3Gbでは足りません。それでも、もし7と8.1のどちらかを選ぶのであれば、MT4/5で最適化を行うにはどちらが良いのでしょうか?