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

 
Igor Makanu:

おそらく、このような売り方をしているのでしょう。

profit=NormalizeDouble((OrderOpenPrice()-Ask)*MarketInfo(_Symbol,MODE_TICKVALUE) *lot/Point,2);

をBidで買う、つまり( Bid -OrderOpenPrice() ) で買います。

TakeProfit =100 ポイント Lot = 0.1, TPでポジションをクローズした場合、その通貨のオープンポジションの利益はいくらになりますか?

profit=NormalizeDouble((OrderOpenPrice()-Тейк_Профит*Point)*MarketInfo(_Symbol,MODE_TICKVALUE)*lot/Point,2);

そのようなことはありません。

 
Vitaly Muzichenko:

操作の必要性:ロット→マネー→距離、そしてティックのコスト

お金は、それを見つけるためにあるのです )

 
Vitaly Muzichenko:

このソリューションでは、手数料やスワップは考慮されていません。ポイントは利益が出ているようですが、コストは赤字です。

OrderProfit()+OrderComission()+OrderSwap() の式で手数料とスワップがあるのが気に食わない

ヘルプによると、手数料はポイントでも預金通貨 でもよいとのことですが、この計算式はこれを考慮しておらず、テストでは益となるよりも害となる可能性がありますが、これは好みの問題でしょう。

ガボ

Take_Profit =100ポイント、lot =0.1、TPでポジションをクローズした場合、その通貨のオープンポジションの利益はいくらになりますか?

そういうわけにはいきません。

数学は得意じゃない?;)

でなければなりません。

profit=NormalizeDouble((Take_Profit*Point)*MarketInfo(_Symbol,MODE_TICKVALUE)*lot/Point,2)。

短縮されると

profit=NormalizeDouble(lot *TakeProfit*MarketInfo(_Symbol,MODE_TICKVALUE),2);

 
Vitaly Muzichenko:

ここでの意味は、OrderProfit() を計算に使用することです。

TakeProfitが作動したときに20米ドルの利益を得るために、注文を出す前にポジションの ロットを計算するにはどうすればよいですか?OrderProfit() はここでは役に立ちません - まだポジションがないのです。

あるいは、0.1ロットで開始したときに20米ドルの利益を得るために、将来のポジションのTakeProfitはどのようになりますか?そして、ここでもOrderProfit()は役に立ちません - 同じ理由からです。

また、別の方法として、0.1ロットで建てたときに利用可能な資金の3%以下の損失となるように、将来のポジションにどのようなストップロスを設定すべきでしょうか?そして、ここでもOrderProfit()は役に立ちません - 同じ理由からです。

更新:すべての計算は、手数料とスワップがわからないと概算になります。1セントや1ポイントの精度が必要な場合は、ストップオーダーを「その場で」調整しなければなりません。

 
Artyom Trishkin:

ポジションを建てる ために注文を出す前に、将来のポジションのロットをどのように計算すれば、takeprofitが発動したときに20米ドルの利益を得ることができますか?OrderProfit() はここでは役に立ちません - まだポジションがありません。

言い換えれば、0.1ロットでオープンした場合、20米ドルの利益を得るために、将来のポジションのtakeprofitはどうなりますか?そして、ここでもOrderProfit()は役に立ちません - 同じ理由からです。

開く前に計算しなければならないことを書いて理解し、すぐにメッセージを削除したところです。なんて賢い返事なんだ)

そんなことを書いて、入力パラメータに手数料として1ロットあたりの金額を入力したことがあります。

 
こんにちは、解りません、助けてください。このコードのどこが問題なのでしょうか?コメントで平均値を表示していますが、刻み ごとに増えていくのでしょうか?ヘルプ:-)))
 for(shift = 0; shift <= Bars-1; shift++)
  {
      zz = iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, shift);
           if(zz > 0.0)
           {
           HZZ[ww]=zz;
           ww++;          
           }
  }
   
  
       for(ww=0;ww<=nn;ww++){
      if(HZZ[ww]>HZZ[ww+1]){SredRazmax += HZZ[ww];}     
      if(HZZ[ww]<HZZ[ww+1]){SredRazmin += HZZ[ww+1];}
      
       
  Comment("Средний размах = ", (SredRazmax-SredRazmin)/nn,",",HZZ[0],",",HZZ[1],",",HZZ[2],",",HZZ[3],",",HZZ[4]); 
 
Dmitry Belov:
は、刻々と増えて いくのでしょうか?ヘルプ:-)))

それは、あなたが提出したコードで、SredRazmaxとSredRazmin 変数を初期化していない、すべてのtickをカウントしていることを意味します。

使う前に変数を初期化するのは良い習慣です。大学でもそう教えますし、バグを見つけるのにかかる時間を短縮できます;)

 

同僚、なぜこのコードはstrategy testerでは実行を拒否されるが、リアルタイムでは正しく実行されるのですか?具体的には、OnChartEvent()関数について話して います。テスターでの可視化モードでは、ボタンをクリックしても実行されません。

input double lot=0.1;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   ButtonCreate("ButtonBuy",100,100,200,40,"Buy",15,clrBlue);
   ButtonCreate("ButtonSell",100,200,200,40,"Sell",15,clrRed);
   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
   long cid=ChartID();
   if(id==CHARTEVENT_OBJECT_CLICK && sparam=="ButtonBuy")
     {
      if(OrderSend(_Symbol,OP_BUY,lot,Ask,200,0,0,NULL,0,0,clrBlue)==-1)
         Print("Error: ",GetLastError());
      ObjectSetInteger(cid,"ButtonBuy",OBJPROP_STATE,false);
     }
   if(id==CHARTEVENT_OBJECT_CLICK && sparam=="ButtonSell")
     {
      if(OrderSend(_Symbol,OP_SELL,lot,Bid,200,0,0,NULL,0,0,clrRed)==-1)
         Print("Error: ",GetLastError());
      ObjectSetInteger(cid,"ButtonSell",OBJPROP_STATE,false);
     }
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+ 
//| ButtonCreate                                                     | 
//+------------------------------------------------------------------+ 
void ButtonCreate(string name,int x,int y,int width,int height,
                  string text,int font_size,color back_clr)
  {
   long cid=ChartID();
   int subWind=0;
   ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER;
   string font="Cambria";
   color text_clr=clrBlack;
   color border_clr=clrBlack;
   bool state=false;
   bool back=false;
   bool selectable=false;
   bool selected=false;
   bool hidden=true;
   long zorder=0;
   if(ObjectFind(cid,name)==-1)
     {
      ObjectCreate(cid,name,OBJ_BUTTON,subWind,0,0);
      ObjectSetInteger(cid,name,OBJPROP_XDISTANCE,x);
      ObjectSetInteger(cid,name,OBJPROP_YDISTANCE,y);
      ObjectSetInteger(cid,name,OBJPROP_XSIZE,width);
      ObjectSetInteger(cid,name,OBJPROP_YSIZE,height);
      ObjectSetInteger(cid,name,OBJPROP_CORNER,corner);
      ObjectSetString(cid,name,OBJPROP_TEXT,text);
      ObjectSetString(cid,name,OBJPROP_FONT,font);
      ObjectSetInteger(cid,name,OBJPROP_FONTSIZE,font_size);
      ObjectSetInteger(cid,name,OBJPROP_COLOR,text_clr);
      ObjectSetInteger(cid,name,OBJPROP_BGCOLOR,back_clr);
      ObjectSetInteger(cid,name,OBJPROP_BORDER_COLOR,border_clr);
      ObjectSetInteger(cid,name,OBJPROP_BACK,back);
      ObjectSetInteger(cid,name,OBJPROP_STATE,state); 
      ObjectSetInteger(cid,name,OBJPROP_SELECTABLE,selectable);
      ObjectSetInteger(cid,name,OBJPROP_SELECTED,selected);
      ObjectSetInteger(cid,name,OBJPROP_HIDDEN,hidden);
      ObjectSetInteger(cid,name,OBJPROP_ZORDER,zorder);
     }
  }
//+------------------------------------------------------------------+
 
Oleg Remizov:

同僚、なぜこのコードはstrategy testerでは実行を拒否されるが、リアルタイムでは正しく実行されるのですか?具体的には、OnChartEvent()関数について話して います。テスターでの可視化モードでは、ボタンをクリックしても実行されません。

MT4のテスターでOnChartEvent()が動作しないため。テスターでボタンの状態フラグを確認する。
 
Artyom Trishkin:
MT4ではOnChartEvent()がテスターで動作しないため。テスターでボタンの状態フラグを確認する。

ありがとうございました。その疑いはあったのですが、ヘルプにOnChartEvent() がテスターで動かないという情報は見つかりませんでした。