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

 
SanAlex #:

をコードに追加してください。

シグナルインジケータで、アラートを持っています。 ここで、より多くのシグナルを持つために、いくつかの行を削除してください。


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

押忍

フクロウをもう少し複雑にしてみることにした。

トレーリングのようなことをしたいのですが、シングル/ダブルアクションで

のアイデアです。

価格が75%からテイクに移行する - ストップを20ピップ減らし(例)、テイクを20ピップ増やした。

価格は 90% テイクに渡される - ストップは 30p 減少し、テイクは 10p 増加する。

私はこのような図式を考えています(...機能...)=>(TP - Mparametr)。

ここで:TP - TakeProfit

Mparametr- EAの外部変数に設定(例:ポイント数)。

この問題を解決するために、どのような関数を使うべきでしょうか?

定義済みの変数bid,askについて読んだことがあるのですが、基本として使うべきでしょうか?

それともMarketInfoや SymbolInfoTickを使うべきでしょうか?

私も似たような解決策を持っていますが、ストップ&テイクのシフトはロットに依存します。

  if((iOTy == OP_BUY)&& (LOT()>LotControl))
             {
              dSL = NormalizeDouble(dOOP - StopLoss * Point+DownLoss * Point, Digits);
              dTP = NormalizeDouble(dOOP + TakeProfit * Point+DownProfit * Point, Digits);

              bool bOM = OrderModify(iOTi, dOOP, dSL, dTP, 0, clrNONE);
             }

似たようなことをしたい。比較的簡単なこと。


MarketInfo - Получение рыночной информации - Справочник MQL4
MarketInfo - Получение рыночной информации - Справочник MQL4
  • docs.mql4.com
MarketInfo - Получение рыночной информации - Справочник MQL4
 
Tretyakov Rostyslav #:

あるいは、このように

この掲示板を1週間近く書き続けてきましたが、ここで問題です。保留中のレベラーもアプローチから類推してボタンで閉じるように設定すると、価格が到達したときに1ポイント下だったのが、なぜかボタンを押さずに勝手に閉じてしまいます。これは1ポイント上(押してから理論通り水準到達後)にしておくべきなのですが...。


//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
  

  
  
  
//--- 
     ObjectCreate(0,"Button_1",OBJ_BUTTON,0,0,0);
   ObjectSetInteger(0,"Button_1",OBJPROP_XDISTANCE,20);
   ObjectSetInteger(0,"Button_1",OBJPROP_YDISTANCE,120);
   ObjectSetInteger(0,"Button_1",OBJPROP_XSIZE,100);
   ObjectSetInteger(0,"Button_1",OBJPROP_YSIZE,20);
   ObjectCreate(0,"Label_1",OBJ_LABEL,0,0,0);
   ObjectSetInteger(0,"Label_1",OBJPROP_XDISTANCE,20);
   ObjectSetInteger(0,"Label_1",OBJPROP_YDISTANCE,40);
   ObjectSetInteger(0,"Label_1",OBJPROP_CORNER,CORNER_LEFT_UPPER);
   ObjectSetString(0,"Label_1",OBJPROP_TEXT,"Price");
   ObjectSetInteger(0,"Label_1",OBJPROP_COLOR,clrBlack);
   
   
   //--- CLOSE BUY +1
   ObjectCreate(0,"Button_21",OBJ_BUTTON,0,0,0);
   ObjectSetInteger(0,"Button_21",OBJPROP_XDISTANCE,240);
   ObjectSetInteger(0,"Button_21",OBJPROP_YDISTANCE,120);
   ObjectSetInteger(0,"Button_21",OBJPROP_XSIZE,100);
   ObjectSetInteger(0,"Button_21",OBJPROP_YSIZE,20);
   ObjectSetString(0,"Button_21",OBJPROP_TEXT,"CLOSE BUY +1");
   ObjectSetInteger(0,"Button_21",OBJPROP_BGCOLOR,Beige);
   ObjectSetInteger(0,"Button_21",OBJPROP_COLOR,Green);
   ObjectCreate(0,"Label_21",OBJ_LABEL,0,0,0);
   ObjectSetInteger(0,"Label_21",OBJPROP_XDISTANCE,20);
   ObjectSetInteger(0,"Label_21",OBJPROP_YDISTANCE,40);
   ObjectSetInteger(0,"Label_21",OBJPROP_CORNER,CORNER_LEFT_UPPER);
   ObjectSetInteger(0,"Label_21",OBJPROP_COLOR,clrBlack);
//---
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---
   if(sparam=="Button_1")
     {
      ObjectSetString(0,"Label_1",OBJPROP_TEXT,DoubleToString(Ask-1*_Point,Digits));
      Comment("цена на момент нажатия кнопки: "+Ask, " ждем цены для входа: "+(Ask-1*_Point));
     }
     
        if(sparam=="Button_21")
     {

      ObjectSetString(0,"Label_21",OBJPROP_TEXT,DoubleToString(Bid+1*_Point,Digits));
      ObjectSetText("MSG","цена Bid в момент нажатия кнопки: "+ DoubleToString(Bid,Digits),8,"Verdana", White);
      ObjectSetText("MSG2","ждем цены Bid для закрытия: "+ DoubleToString(Bid+1*_Point,Digits),8,"Verdana", White);

     }
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   int ticket;
   double price=StringToDouble(ObjectGetString(0,"Label_1",OBJPROP_TEXT));
   if(Ask<=price)
     {
      ticket = OrderSend(_Symbol,OP_BUY,0.01,Ask,0,0,0,NULL,0,0,clrGreen);
      ObjectSetString(0,"Label_1",OBJPROP_TEXT,DoubleToString(DBL_MAX,Digits));
      ObjectSetInteger(0,"Button_1",OBJPROP_STATE,false);
      Comment("цена ожидания была: "+price, " зашли по: "+Ask, " TakeProfit на: "+(Ask+4*_Point));
     }
     
     
     
       //-----close buy +1

   double priceclosebuyplus1=StringToDouble(ObjectGetString(0,"Label_21",OBJPROP_TEXT));
   if(Bid>=priceclosebuyplus1)
     {

      
      ObjectSetString(0,"Label_21",OBJPROP_TEXT,DoubleToString(DBL_MAX,Digits));
      ObjectSetInteger(0,"Button_21",OBJPROP_STATE,false);
      ObjectSetText("MSG","ожидали цену закрытия Bid: "+DoubleToString(priceclosebuyplus1,Digits),8,"Verdana", White);
      ObjectSetText("MSG2","закрыли по цене Bid: "+ DoubleToString(Bid,Digits),8,"Verdana", White);
      CloseBuyPositions1();
     }
     
     
     
  }
  
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseBuyPositions1()
  {

   for(int i=OrdersTotal()-1; i>=0; i--)
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))



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

  }

助け舟を出す

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

とにかく、私はほぼ一週間、このタブローを書いてきたし、ここで問題は、私はまた、価格が到達したときに下のポイントだったアプローチ上のボタンのアナログに閉鎖のいくつかの種類に最も保留中のレベルを置く場合、尋ねずに何らかの理由で自動的にそれを上記のポイント(押した後、理論上の必要性としてレベルに達したときに)すべきボタンを押すことなく、すぐに閉じています。


助け舟を出す


if(Bid>=priceclosebuyplus1&&priceclosebuyplus1>0)
 
законопослушный гражданин #:

押忍

フクロウをもう少し複雑にしてみることにした。

トレーリングのようなことをしたいのですが、シングル/ダブルアクションで

のアイデアです。

価格が75%からテイクに移行する - ストップを20ピップ減らし(例)、テイクを20ピップ増やす。

価格が90%通過してテイク-ストップが(例えば)30ピップ減少し、テイクが10ピップ増加した。


int TakeProfit=200;
int StopLoss  =100;
//+----------------------------------------------------------------------------+
void TrailingOrders()
  {
   for(int i = OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
           {
            if(OrderType() == OP_BUY)
              {
               if(Bid >= OrderOpenPrice()+(TakeProfit*0.75*_Point) && OrderStopLoss()<OrderOpenPrice()-20*_Point)
                 {
                  if(OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss()+20*_Point, OrderTakeProfit()+20*_Point, 0))
                     Print("Модификации ордера на покупку успешна!");
                  else
                     Print("Ошибка модификации ордера на покупку! - ",GetLastError());
                 }
               if(Bid >= OrderOpenPrice()+(TakeProfit*0.9*_Point) && OrderStopLoss()>=OrderOpenPrice()-20*_Point)
                 {
                  if(OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss()+30*_Point, OrderTakeProfit()+10*_Point, 0))
                     Print("Модификации ордера на покупку успешна!");
                  else
                     Print("Ошибка модификации ордера на покупку! - ",GetLastError());
                 }
              }
           }
        }
     }
  }
 
Tretyakov Rostyslav #:

ありがとうございます!面白いですね。

もし(Bidは現在の価格パラメータで、どのような方法でも呼び出されない)、特定の値をそれと比較することができることが判明した?

で、Bidの 単位はticksですか?(金銭で表されていない)

 
Tretyakov Rostyslav #:


1つだけ気になることがあります。 すべての注文が時々終了するのですが(つまり、すべて、常に!)、時々、3-4個の注文を出すと、そのうちの2個または1個だけが終了することがあるのです。このための特別なi-checkがあるのですが、ヒントになるかもしれません。

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseBuyPositions1()
  {

   for(int i=OrdersTotal()-1; i>=0; i--)
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))



         if(OrderType()==OP_BUY)
           {
            if(OrderClose(OrderTicket(), OrderLots(), Bid, 0, NULL))
              {
               Print("Order Close");
              }
           }

  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseSellPositions2()
  {

   for(int i=OrdersTotal()-1; i>=0; i--)
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))



         if(OrderType()==OP_SELL)
           {
            if(OrderClose(OrderTicket(), OrderLots(), Ask, 0, NULL))
              {
               Print("Order Close");
              }
           }

  }
//+------------------------------------------------------------------+
 
законопослушный гражданин #:

ありがとうございます!面白いですね。

もし(Bidは現在の価格パラメータで、どのような方法でも呼び出されない)、特定の値をそれと比較することができることが判明した?

で、Bidの 単位はticksですか?(金銭で表されていない)

入札は 現価 ということで、始値±の条件と比較してください。

ティックについては、BidもAskもティックで計測されることはない。ティックは新しい価格の到来を意味します。

 
Tretyakov Rostyslav #:

入札は 現価 ということで、始値±条件と比較する必要があります。

ティックについては、BidもAskもティックで計測されることはない。ティックは新しい価格の到来を意味します。

なるほど、では何を基準にするかというと、pips/ピップス?

 
законопослушный гражданин #:

なるほど、ではどのように測定するのでしょうか?

MarketInfo(_Symbol,MODE_TICKSIZE);