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

 
Yan Barmin:
混乱した。MT4の未決済注文(保留注文ではない)で、すべての手数料、スワップなどを含む実質的な利益(損失)を得るにはどうすればよいですか?(OrderProfit() + OrderSwap() + OrderCommission() orOrderProfit() or something else)?注文が終了した後、何か収入を得たい。
 OrderProfit() + OrderSwap() + OrderCommission()
 

地下の窓のローソクにこれらの体積の数字を配置する方法、つまり、一番下に配置するか、地下が機能しない場合は、すべての数字を中央に水平に一列に並べるようにします。ご協力をお願いします。

#property indicator_chart_window

#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 2
#property indicator_width4 4
#property indicator_width5 4

#プロパティ indicator_color1 SkyBlue
#プロパティ indicator_color2 Maroon
#property indicator_color3 イエロー
#property indicator_color4 ブルー
#property indicator_color5 DeepPink

extern int BarsToCount = 990;

extern string pus1 = "";
extern string p_s = "ポイント設定";
extern bool use_points = true;
extern int distance_point = 5;
extern color color_point_u = Lime;
extern color color_point_d = DeepPink;
extern color color_point_s = Yellow;
extern inttern size_point = 14;

外部文字列 pus2 = "";
extern string s_w = "Way";
extern bool use_show_same_way = true;
extern bool use_show_daily_way = true;

extern string pus3 = "";
extern string al = "Alerts";
extern bool use_alerts = false;
extern string up_alert = "Up";
extern string down_alert = "ダウン";


ダブルアップ[]。
ダブルダウン[]。
double mid[];
double up2[]です。
ダブルダウン2[]。
double none[];

static int prevtime = 0;

//
int init()
{

IndicatorShortName("A")。
return(0)です。
}

//
int deinit()
{
文字列名_de;
for(int c=BarsToCount;c>=0;c--)
{
name_de="Vol_"+DoubleToStr(c,0);
if(ObjectFind(name_de)!=-1) ObjectDelete(name_de);
}
return(0)です。
}
int start()
{
////////////
up[0]=EMPTY_VALUE。
down[0]=EMPTY_VALUE。
mid[0]=EMPTY_VALUEとする。
if(Close[0]>Open[0]) up[0]=Volume[0];
if(Close[0]<Open[0]) down[0]=Volume[0];
if(Close[0]==Open[0]) mid[0]=Volume[0];

////////////////
if(use_points)
Ob_cre(0)です。

if(!use_points)
Ob_del(0);
////////////
if(Time[0] == prevtime) return(0);
prevtime = Time[0];
for(int c=BarsToCount;c>=1;c--)
{
////////////
if(use_points)
Ob_cre(c)です。

if(!use_points)
Ob_del(c)です。
////////////
up[c]=EMPTY_VALUEです。
down[c]=EMPTY_VALUE。
mid[c]=EMPTY_VALUEとする。
up2[c]=EMPTY_VALUEです。
down2[c]=EMPTY_VALUE。

/////////////////
if(Close[c]>Open[c]) up[c]=Volume[c];
if(Close[c]<Open[c]) down[c]=Volume[c]。
if(Close[c]==Open[c]) mid[c]=Volume[c];
none[c]=Volume[c]+Volume[c]/6;


//////////////
if(use_show_same_way)
{

if(Close[c]>Open[c] && Close[c+1]>Open[c+1])とする。
{
up2[c]=Volume[c]; up2[c+1]=Volume[c+1];
up[c]=EMPTY_VALUE; up[c+1]=EMPTY_VALUE;
}

if(クローズ[c]<オープン[c] && クローズ[c+1]<オープン[c+1])
{
down2[c]=Volume[c]; down2[c+1]=Volume[c+1];
down[c]=EMPTY_VALUE; down[c+1]=EMPTY_VALUE。
}

}


if(use_alerts)
{
if(up2[1]!=EMPTY_VALUE && up2[4]==EMPTY_VALUE) Alert(up_alert);
if(down2[1]!=EMPTY_VALUE && down2[4]==EMPTY_VALUE) Alert(down_alert);
}
}
return(0)です。
}
//func
//+------------------------------------------------------------------+///////////////////////////////
void Ob_cre(int num_of_bar)
{
文字列名="Vol_"+DoubleToStr(num_of_bar,0);

色 col_po;
if(Close[num_of_bar]>Open[num_of_bar]) col_po=color_point_u;
if(Close[num_of_bar]<Open[num_of_bar]) col_po=color_point_d;
if(Close[num_of_bar]==Open[num_of_bar]) col_po=color_point_s;

if(ObjectFind(name)==-1)とする。
{
ObjectCreate(name,OBJ_TEXT,0,0)を作成します。
}
ObjectSet(name,OBJPROP_TIME1,Time[num_of_bar])とする。
ObjectSet(name,OBJPROP_PRICE1,High[num_of_bar]+distance_point*Point)とする。
ObjectSet(name,OBJPROP_ANGLE,90)です。
ObjectSetText(name,DoubleToStr(Volume[num_of_bar],0),size_point, "Arrial",col_po);
ObjectSet(name,OBJPROP_ANCHOR,ANCHOR_CENTER)です。
}

//
void Ob_del(int num_of_bar)
{
文字列名="Vol_"+DoubleToStr(num_of_bar,0);
}

ファイル:
 

EURUSDを ベースに合成シンボルを作成し、ZIGZAGと 名付ける(名前の衝突を避けるため)。

分足をインポートすると、すべて正常にインポートされますが、再リクエストすると、バーの数が 0になっています。history/symbol」フォルダに39mbの 作成ファイル「2019.hcc」があり、「ticks」フォルダはすべて空です。端末を変更(2019年5月30日より現行バージョン)、パソコン-どこでも動作しない。

何がエラーになるのでしょうか?

ファイル:
simvol.zip  809 kb
 
SEM:

EURUSDを ベースに合成シンボルを作成し、ZIGZAGと 名付ける(名前の衝突を避けるため)。

分足をインポートすると、すべて正常にインポートされますが、再リクエストすると、バーの数が 0になっています。history/symbol」フォルダに39mbの 作成ファイル「2019.hcc」があり、「ticks」フォルダはすべて空です。端末を変更(2019年5月30日現在のバージョン)、コンピュータ-どこでも動作しない。

何がエラーになるのでしょうか?

マッチングネームでは
 
皆さんこんにちは、MT4の記事Balanceをデモ版で改善し、変更できるようにしてはいかがでしょうか?デモ残高を任意に変更する可能性は?トップアップのどちらか。それとも、デモ資金を出金して、デモでの取引を本番に近いものにするのですか?
 
oleqas1:
こんにちは、Demo版のMT4記事Balanceを改善し、編集できるようにしたいのですが、いかがでしょうか?自力でデモバランスが変わる可能性があるのは何だろう。トップアップのどちらか。それとも、デモ資金を出金して、デモでの取引を本番に近いものにするのですか?

MetaTrader4 は今後更新されません。このプラットフォームの開発はかなり前に中止されました。せいぜい重大なバグが修正される程度です。

MetaTrader5に移動し、TesterWithdrawal()を使用 します。

Документация по MQL5: Общие функции / TesterWithdrawal
Документация по MQL5: Общие функции / TesterWithdrawal
  • www.mql5.com
Общие функции / TesterWithdrawal - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
こんにちは、3日間の欧州セッションのボラティリティを計算するにはどうしたらよいでしょうか。
 

こんにちは、例えばbuystopとbuylimitがある場合です。

バイストップが開かれている場合、buylimit を変更し、新しいバイストップを設定します。

buylimit を開くには、buystop を変更し、新しい buylimit を設定する必要があります。

試してみたところ、開くのですが、エラーメッセージ OrderModify error 1, OrderModify error 130が表示されます。どうすれば直るのか、私にはわからない。よろしくお願いします。


void OnTick()
  {
      price_buystop = NormalizeDouble(Ask+StopLoss*Point,Digits);
      price_buyLimit = NormalizeDouble(price_buystop-StopLoss*2*Point,Digits);
      price_buy = PriceOpenLastPos();
      
      //для байстоп
        if (BuyStopCount()==0)//если нет байстопа
       { 
       TP= NormalizeDouble(price_buystop + TakeProfit*Point,Digits);
       SL= NormalizeDouble(price_buystop - StopLoss*Point,Digits);  
       if(CountBuy()==0)// и нет открытых бай 
       {    
       int ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,price_buystop,Slippage,SL,TP,"buystop",Magic,0,Blue);       
       if (ticket <0) Print ("Не удалось открыть buystop ");
       }
         if (CountBuy()>=1) // если нет байстоп но есть открытая
         {  
        price_buystop = NormalizeDouble(price_buy + StopLoss*Point,Digits);
        int ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,price_buystop,Slippage,SL,TP,"buystop",Magic,0,Blue);       
        if (ticket <0) Print ("Не удалось открыть buystop ");            
         } 
      } else {   //если есть байстоп модифицируем
      if (CountBuy()>=1)//и есть открытые и байстоп
         {        
         price_buystop = NormalizeDouble(price_buy+StopLoss*Point,Digits);
         TP= NormalizeDouble(price_buystop + TakeProfit*Point,Digits);
         SL= NormalizeDouble(price_buystop - StopLoss*Point,Digits);        
         bool res = OrderModify(OrderTicket(),price_buystop,SL,TP,0,Blue);     
         }   
      }
      
   //для байлимит
        if (BuyLimitCount()==0) // если нет байлимит
       {   
       TP= NormalizeDouble(price_buyLimit + TakeProfit*Point,Digits);
       SL= NormalizeDouble(price_buyLimit - StopLoss*Point,Digits); 
        if(CountBuy()==0)// и нет открытых открываем
        {
         int ticket=OrderSend(Symbol(),OP_BUYLIMIT,Lots,price_buyLimit,Slippage,SL,TP,"BuyLimit",Magic,0,Blue);       
         if (ticket <0) Print ("Не удалось открыть BuyLimit ");   
        }
        if (CountBuy()>=1)// если открытая есть
         {         
        price_buyLimit = NormalizeDouble(price_buy - StopLoss*Point,Digits);       
        int ticket=OrderSend(Symbol(),OP_BUYLIMIT,Lots,price_buyLimit,Slippage,SL,TP,"BuyLimit",Magic,0,Blue);         
        if (ticket <0) Print ("Не удалось открыть BuyLimit ");            
         }           
      }  else { // если есть байлимит и есть открытая
       if (CountBuy()>=1)
         {
         price_buyLimit = NormalizeDouble(price_buy-StopLoss*Point,Digits);         
         TP= NormalizeDouble(price_buyLimit + TakeProfit*Point,Digits);
         SL= NormalizeDouble(price_buyLimit - StopLoss*Point,Digits);        
         bool res = OrderModify(OrderTicket(),price_buyLimit,SL,TP,0,Blue);    
         }   
      }
   
  }
//+------------------------------------------------------------------+
// проверяем есть ли байстоп ордера с конца
  int BuyStopCount()
  {
  int count = 0;
  for (int i=OrdersTotal()-1;i>=0;i--)
  {
    if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES) == true && 
        OrderMagicNumber()== Magic && OrderType() == OP_BUYSTOP )                        
        {
        count ++;
        }
    }
    return(count); 
  }
  
  // проверяем есть ли ,байлимит ордера с конца
  int BuyLimitCount()
  {
  int count = 0;
  for (int i=OrdersTotal()-1;i>=0;i--)
  {
    if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES) == true && OrderMagicNumber()== Magic &&                        
        OrderType() == OP_BUYLIMIT )                       
        {
        count ++;
        }
    }
    return(count);      
  }
  
   //проверяем открытые ордера покупку
  int CountBuy()
  {
  int count = 0;
  for (int trade = OrdersTotal()-1; trade>=0; trade --)
  {
    if (OrderSelect (trade, SELECT_BY_POS, MODE_TRADES) ==true)
    {
      if (OrderSymbol()==Symbol() && OrderMagicNumber()== Magic && OrderType()== OP_BUY)
        count++;
    }
   }return(count);
  }
  
  
  // возвращает цену открытия последней открытой позиции
  
  double PriceOpenLastPos()
{
int k=OrdersTotal();
double r =0;
int i;

for (i=0; i<k; i++)
  {
  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
   {
    if (OrderSymbol()== Symbol() && OrderMagicNumber()== Magic && OrderType()== OP_BUY)
     r=OrderOpenPrice();
   }
}return (r);
}


 

MT4のストラテジーテスターでEAをテストする際、これらのエラーは何に関連しているのでしょうか?


 
Alexandr Sokolov:

MT4のストラテジーテスターでEAをテストする際、これらのエラーは何に関連しているのでしょうか?


ロードヒストリーです。F2.