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

 
Vitalie Postolache:


同じことを言うよ。あなたは論理が苦手なんですね。利用可能な資金とリスクの値(確か3%くらいと書いてあった)から、初期ロットを即座に計算するのは何か問題があるのでしょうか?なぜ、すべてを一カ所で行う必要があるのでしょうか?

自由証拠金の値を取り、リスクを掛け、100で割って1ロットの証拠金の値 - ここでは、自由証拠金の割合を指定してロットを計算する最も簡単な公式を紹介します。また、ロット変更のステップを考慮し、証券会社が許容する最小/最大ロットサイズを超えないようにする必要があります。


EAが取引するのは、重なり合う9つの連続した反対注文が開く確率があり、次の注文はそれぞれ2倍されるので、マージンが保てず、最後の保留注文 が開かない可能性があるため、最後の最大可能ロットから計算しなければならないとお話しました。一般的には、すべての注文が開始された場合のマージンを計算し、これらのデータを基に逆の順序で最初のロットを計算する必要があります。

 
if(OrdersTotal() >= OrderCount)
{
を返します。
}
//----
if(r > 50 && p > m)//買い注文を 開始する
{
ticketB = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,0,0,",111,0,Green); //買いの注文を出す。
}
//-----
if(r < 50 && p < m)//open 売り注文の条件
{
ticketS = OrderSend(Symbol(),OP_SELL,0.1,Bid,5,0,0,", 111,0,Blue)です。
}
//----- クローズオーダー
for (int i=1; i<=OrdersTotal(); i++)
{
if(OrderSelect(ticketB,SELECT_BY_TICKET)==true)
{
if(r < 50 && p < m)
{
OrderClose(ticketB,0.1,Bid,5,Red)。
}
}

}

例文から引用したのだと思いますが、どのように書けば注文が完了するのか教えてください。

逆指値で買うか? 頭を悩ませているところです。

 
funnyrain8:
if(OrdersTotal() >= OrderCount)
{
を返します。
}
//----
if(r > 50 && p > m)//買い注文を 開始する
{
ticketB = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,0,0,",111,0,Green); //買いの注文を出す。
}
//-----
if(r < 50 && p < m)//open 売り注文の条件
{
ticketS = OrderSend(Symbol(),OP_SELL,0.1,Bid,5,0,0,", 111,0,Blue)です。
}
//----- クローズオーダー
for (int i=1; i<=OrdersTotal(); i++)
{
if(OrderSelect(ticketB,SELECT_BY_TICKET)==true)
{
if(r < 50 && p < m)
{
OrderClose(ticketB,0.1,Bid,5,Red)。
}
}

}

例文から引用したのだと思いますが、どのように書けば注文が完了するのか教えてください。

逆指値で買うか? 頭を悩ませているところです。


 if(OrdersTotal()>=OrderCount)  //Обрати внимание на эту конструкцию
     {                            //
      return;
     }
//---- 
   if(r>50 && p>m) //условия открытия ордера на покупку
     {
      for(int i=1; i<=OrdersTotal(); i++)
        {
         if(OrderSelect(ticketB,SELECT_BY_TICKET)==true)
           {
            if(OrderType()==OP_SELL)
              {
               OrderClose(OrderTicket(),0.1,Ask,5,Red);
              }
           }
        }
      ticketB=OrderSend(Symbol(),OP_BUY,0.1,Ask,5,0,0,"",111,0,Green); //открыnие ордера на покупку     

     }

//-----     
   if(r<50 && p<m) //условия открытия ордера на продажу
     {
     for(int i=1; i<=OrdersTotal(); i++)
        {
         if(OrderSelect(ticketB,SELECT_BY_TICKET)==true)
           {
            if(OrderType()==OP_BUY)
              {
               OrderClose(OrderTicket(),0.1,Bid,5,Red);
              }
           }
        }
      ticketS=OrderSend(Symbol(),OP_SELL,0.1,Bid,5,0,0,"",111,0,Blue);
     }

このように
 
funnyrain8:
if(OrdersTotal() >= OrderCount)
{
を返します。
}
//----
if(r > 50 && p > m)//買い注文を 開始する
{
ticketB = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,0,0,",111,0,Green); //買いの注文を出す。
}
//-----
if(r < 50 && p < m)//open 売り注文の条件
{
ticketS = OrderSend(Symbol(),OP_SELL,0.1,Bid,5,0,0,", 111,0,Blue)です。
}
//----- クローズオーダー
for (int i=1; i<=OrdersTotal(); i++)
{
if(OrderSelect(ticketB,SELECT_BY_TICKET)==true)
{
if(r < 50 && p < m)
{
OrderClose(ticketB,0.1,Bid,5,Red)。
}
}

}

例文から引用したのだと思いますが、どのように書けば注文が完了するのか教えてください。

逆指値で買うか? 頭を悩ませているところです。


チケット上で注文が選択されている場合は、ループ内のアクションは必要ありません。コードを修正したい場合は、SRCボタンを使って、コードをメッセージに貼り付けて ください。
 
#property copyright "Copyright 2017, 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                                             |
//+------------------------------------------------------------------+
int ticketB,ticketS;
void OnTick()
//------------------------------------------------------------------------------------------------
{
double p = iClose("EURUSD",PERIOD_M15,0);                                    //показание текущей цены 
double r = iRSI  ("EURUSD",PERIOD_M15,21,PRICE_CLOSE,0);                     //значение индюка RSI
double m = iMA   ("EURUSD",PERIOD_M15,89,0,MODE_EMA,PRICE_CLOSE,0);          //значение индюка МА
int    OrderCount  = 1;

//---------------ПОДСЧЕТ ОРДЕРОВ------------------------------------------------------------------
if(OrdersTotal() >= OrderCount)
          {
             return;
          }   
//-------------ОТКРЫТИЕ ОРДЕРА НА ПОКУПКУ--------------------------------------------------------------------
/*if(r > 50 && p > m)                                                        //условия открытия ордера на покупку
    {   
        ticketB = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,0,0,"",111,0,Green);         
    }
//------------ЗАКРЫТИЕ ОРДЕРА НА ПРОДАЖУ--------------------------------------------------------
if(r<50 && p<m)                                                           
     {
      for(int i=1; i<=OrdersTotal(); i++)
        {
         if(OrderSelect(ticketB,SELECT_BY_TICKET)==true)
           {
            if(OrderType()==OP_BUY)
              {
                  ticketB = OrderClose(OrderTicket(),0.1,Bid,5,Red);
              }
           }
        }
     }*/
//------------------ОТКРЫТИЕ ОРДЕРА НА ПРОДАЖУ---------------------------------------------------------
if(r < 50 && p < m)                                                        //условия открытия ордера на продажу
    {
        ticketS = OrderSend(Symbol(),OP_SELL,0.1,Bid,5,0,0,"",111,0,Blue); 
    } 
//---------------------ЗАКРЫТИЕ ОРДЕРА НА ПРОДАЖУ---------------------------------------------------------
if(r>50 && p>m) 
     {
   for(int i=1; i<=OrdersTotal(); i++)
        {
         if(OrderSelect(ticketS,SELECT_BY_TICKET)==true)
           {
            if(OrderType()==OP_SELL)
              {
                  ticketS = OrderClose(OrderTicket(),0.1,Ask,5,Red);
              }
           }
        }
     }
}
//+------------------------------------------------------------------+
SRCありがとうございます)、これは、tsはこのように見える、キャンドルはwopと50以下のrsiを下回ったときに閉じて、反対の条件で注文を閉じ、同時に閉じた後に購入が起こるはずです、その後1注文とそれ以上のように周期的に... しかし、今私は1注文が開いて、それはそれだ、と停止が機能していないです......
 
funnyrain8:
SRCのおかげで)、これは、tsはこのように見える、キャンドルは50以下手首とrsiを閉じたときに発生する必要があり、反対の条件で注文を閉じると同時に、閉鎖後に購入すると、その後1注文とそれ以上のように周期的に起こるはずです... しかし、今私は1注文とすべてを開き、停止が動作しない...


私流に書き直しましたが、ご理解いただけたでしょうか?もし不明な点があれば、ご遠慮なくお尋ねください。

//+------------------------------------------------------------------+
//|                                                   funnyrain8.mq4 |
//|                                                   Sergey Gritsay |
//|                         https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link      "https://www.mql5.com/ru/users/sergey1294"
#property version   "1.00"
#property strict

input int             MagicNumber  = 20110315;       // Номер копии
input string          CommentOrder = "Origenal";     // Комментарий к ордеру
input int             Slippage=100;             // Проскальзование (Пипс)
input double          Lot=0.01;           // Объем лота 
input int             SignalBar=0; // Сигнальный бар 

sinput string            s1=NULL; // Setting indicator slow МА
input int                ma_period=89;    // Period
input ENUM_MA_METHOD     ma_method=MODE_EMA;//Method calculation
input ENUM_APPLIED_PRICE ma_price=PRICE_CLOSE;//Price calculation

sinput string            s2=NULL; // Setting indicator RSI
input int                rsi_period=21; // Period
input ENUM_APPLIED_PRICE rsi_price=PRICE_CLOSE;//Price calculation
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(TotalOrder()==0)OrderOpen(GetSignal());
   else OrderClose(GetSignal());
  }
//+------------------------------------------------------------------+
int GetSignal()
  {
   double rsi = iRSI(_Symbol,PERIOD_CURRENT,rsi_period,rsi_price,SignalBar);                     //значение индюка RSI
   double ma = iMA   (_Symbol,PERIOD_CURRENT,ma_period,0,ma_method,ma_price,SignalBar);          //значение индюка МА

   if(Close[SignalBar]>ma && rsi>50.0)return(OP_BUY);
   if(Close[SignalBar]<ma && rsi<50.0)return(OP_SELL);
   return(WRONG_VALUE);
  }
//+------------------------------------------------------------------+
int TotalOrder()
  {
   int value=0;
   int total=OrdersTotal();
   for(int i=total-1; i>=0; i--)
     {
      if(!OrderSelect(i,SELECT_BY_POS))continue;
      if(OrderSymbol()!=_Symbol)continue;
      if(OrderMagicNumber()!=MagicNumber)continue;
      if(OrderType()>1)continue;
      value++;
     }
   return(value);
  }
//+------------------------------------------------------------------+
void OrderOpen(int type)
  {
   if(type==WRONG_VALUE)return;
   double price_open=(type==OP_BUY)?NormalizeDouble(Ask,_Digits):NormalizeDouble(Bid,_Digits);
   int ticket=OrderSend(_Symbol,type,Lot,price_open,Slippage,0,0,CommentOrder,MagicNumber);
   if(ticket<0)Print("Ошибка открытия ордера № - ",GetLastError());
  }
//+------------------------------------------------------------------+
void OrderClose(int type)
  {
   if(type==WRONG_VALUE)return;
   int total=OrdersTotal();
   for(int i=total-1; i>=0; i--)
     {
      if(!OrderSelect(i,SELECT_BY_POS))continue;
      if(OrderMagicNumber()!=MagicNumber)continue;
      if(OrderSymbol()!=_Symbol)continue;
      if(OrderType()!=type)continue;
      double price_close=(type==OP_BUY)?NormalizeDouble(Bid,_Digits):NormalizeDouble(Ask,_Digits);
      bool res=OrderClose(OrderTicket(),OrderLots(),price_close,Slippage);
      if(!res)Print("Ошибка закрытия ордера № - ",GetLastError());
     }
  }
//+------------------------------------------------------------------+

...

 
Sergey Gritsay:


私流に書き直しました。ご理解いただけると幸いです。

...


ああ、クロージング以外はほとんど書いたつもりだったのに、まだ学ぶことがたくさんあります...ありがとうございます。)
 
こんにちは。メタトレーダー5のソフトをダウンロードしました。2シグナルを契約しました。口座残高がプラス20$になりました。バーチャルホスティングを インストールしようとしているのですが、何もうまくいきません。ナビゲータを押して、取引口座に接続しても、テーブルバーチャルホスティングにそのようなタブがない。スクリーンショットを送ります。共有ホスティングに接続するにはどうすればよいですか?
ファイル:
3p46y0.jpg  273 kb
g4ppe22.jpg  264 kb
 
Жанна Платонова:
こんにちは。メタトレーダー5のソフトをダウンロードしました。2シグナルを契約しました。口座残高がプラス20$になりました。バーチャルホスティングをインストールしようとしているのですが、何もうまくいきません。ナビゲータを押して、取引口座に接続しても、テーブルバーチャルホスティングにそのようなタブがない。スクリーンショットを送ります。共有ホスティングに接続するにはどうすればよいですか?

メインメニューの helpをクリックする。
 
こんにちは。私は質問を持っている - 異なる企業のプラットフォームmt4から(ワインを通じて)配信されたすべてのMacで(シエラ)同じ不具合 - あなたが自由なウィンドウとしてそれを移動するために下部にあるその通常の場所からそれを解放した場合の端末 - それは縮小し、それを介して動作は完全に不可能である。オートアレンジャーを無効にしても効果がない。前者の場所に端末を戻すことは絶対に不可能です。つまり、単に取り付けられず、それ以上開くことはありません。質問があります。インターフェイス全体を元の場所に戻すためのショートカットやボタンをご存知の方はいらっしゃいますか?敬具