[アーカイブ!】どんなルーキーの質問でも、フォーラムを散らかさないように。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 2. - ページ 149

 
Vovo4ka:

みんな、どこがエラーなのか...aはその後シグナルでいくつかのポジションを開き、時にはシグナルを見逃す...aはその後ペアでストップまたは利益をトリガーした後、新しいポジションを開く...。

見てください...条件:RSIの期間14と17の下から上へのレベル30と上から下への上昇トレンド70の同時クロス...。


A1=diRSI1;
      A2=diRSI2;
なぜ、そのような条件を求めるのでしょうか?
 
Vovo4ka:

みんな、どこがエラーなのか...aはその後シグナルでいくつかのポジションを開き、時にはシグナルを見逃す...aはその後ペアでストップまたは利益をトリガーした後、新しいポジションを開く...。

見てください...条件:RSIの期間14と17の下から上へのレベル30と上から下への上昇トレンド70の同時クロス...。


 if (( diRSI1<30 && diRSI2<30)){      
         OpenBuy();
         return(0);
      }

      if (diRSI1>70 && diRSI2>70){
         OpenSell();
         return(0);
      }
私ならそのようにします。また、ストップは売りではなく、買いで設定します。
 
todem:
私ならそのようにしますし、ストップは売りでなく買いで設定します。


は...あなたの方法では、30以下の値では、取引を開始します!!それは受け入れられない...私は下から上に30レベルのクロスが必要です!!!!!!!!!!!!!!!!。

と、その値

A1=diRSI1;
      A2=diRSI2;

これらはちょうど前のキャンドルオープニングのRSIの値です...彼らはちょうど30未満でなければなりません!!すべてがここで正しいです...私はちょうど取引が信号でいくつかの部分で開かれる理由を理解していない!!!!!!!!!!!!!。

 
todem:
私ならそのようにし、すぐに買いではなくバイストップ、売りではなくセルストップに設定します
 
Vovo4ka:


は...あなたのやり方では、30以下の値は取引を開始します!!これは受け入れられません...私は下から30レベルのクロスが必要です!!!!!!!!!!!!!!。

と、その値

これらは、ちょうど前のオープニングローソクのRSI値です...彼らはちょうど30未満でなければなりません!!ここではすべてが正しいです...私はちょうど取引が信号で数回開かれる理由を理解していません

1トレードを開かせるなら386、1秒で100万トレードを執行できる方がよっぽど速い。1つの取引の開始を制御することは、オープントレードを制御することによって行われます。トレードの合計が0ならオープン、0なら終了です。
 
todem:
もし、1つのトレードを開くことを望むなら、それはうまくいかないでしょう。386コンピュータで、1秒で100万トレードをする方がはるかに速いのです。1つの案件の開封を制御することで、開封された案件を制御することができます。トレードの合計が0ならオープン、0なら終了です。


うーん...。というのは、100万件の取引があるのなら、取引は1回で済ませるべき......ということです。

OK、何とかしてみます))) トレードをコントロールするコードがあれば教えてください...お願いします)))

 
Vovo4ka:


うーん...。ということです。100万件のトランザクションがあれば、トランザクションは1件ずつ開かれるはずですが......。

OK、何とかしてみます))) トランザクションコントロールのコードがあれば、教えてください)))

int OrdCon(int nap, int MGV)
  {
    int result=0;
    for (int i=0;i<OrdersTotal();i++) {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if ((nap==0) && (OrderSymbol() == Symbol())&& (OrderMagicNumber() == MGV)) {
        result=result+1; // открыт ордер бай 
      }
      if ((nap==1) && (OrderSymbol() == Symbol()) && (OrderMagicNumber() == MGV)) {
        result=result+1; // открытый ордер селл 
      }
    }
    return(result); // 0 means we have no trades
  }
以下はその機能です。
 
todem:
以下はその機能です。

      if ((nap==0) && (OrderSymbol() == Symbol())&& (OrderMagicNumber() == MGV)) {
        result=result+1; // открыт ордер бай 
      }
      if ((nap==1) && (OrderSymbol() == Symbol()) && (OrderMagicNumber() == MGV)) {
        result=result+1; // открытый ордер селл 
      }

で、この時点で、オープンオーダーが売りか買いかという結論は、どのような根拠に基づくものなのでしょうか。

以下は、上記のコードの全体です。

int OrdCon(int nap, int MGV)
  {
    int result=0;
    for (int i=0;i<OrdersTotal();i++) {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if ((nap==0) && (OrderSymbol() == Symbol())&& (OrderMagicNumber() == MGV)) {
        result=result+1; // открыт ордер бай 
      }
      if ((nap==1) && (OrderSymbol() == Symbol()) && (OrderMagicNumber() == MGV)) {
        result=result+1; // открытый ордер селл 
      }
    }
    return(result); // 0 means we have no trades
  }
 

ここでは、私のアドバイザーがあなたのPSIを最適化しました。

 
//+------------------------------------------------------------------+
//|                                               20/200 expert.mq4  |
//|                                                    1H   EUR/USD  |
//|                                                    Smirnov Pavel |
//|                                                 www.autoforex.ru |
//+------------------------------------------------------------------+

#property copyright "Smirnov Pavel"
#property link      "www.autoforex.ru"

extern int TakeProfit = 20; // Уровень тейкпрофит в пунктах
extern int StopLoss = 200; // уровень стоплосс в пунктах
extern int TradeTime=18;
extern int t1=7;
extern int t2=2;
extern int delta=7;
extern int dayout=1;
extern double lot = 0.1;

int ticket;
bool cantrade=true;

int OpenLong(double volume=0.1)
{
  int slippage=10;
  string comment="20/200 expert (Long)";
  color arrow_color=Red;
  int magic=0;

  ticket=OrderSend(Symbol(),OP_BUY,volume,Ask,slippage,Ask-StopLoss*Point,
                      Ask+TakeProfit*Point,comment,magic,0,arrow_color);
  if(ticket>0)
  {
    if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
    {
      Print("Buy order opened : ",OrderOpenPrice());
      return(0);
    }  
  }
  else 
  {
    Print("Error opening Buy order : ",GetLastError()); 
    return(-1);
  }
}
  
int OpenShort(double volume=0.1)
{
  int slippage=10;
  string comment="20/200 expert (Short)";
  color arrow_color=Red;
  int magic=0;  
  
  ticket=OrderSend(Symbol(),OP_SELL,volume,Bid,slippage,Bid+StopLoss*Point,
                      Bid-TakeProfit*Point,comment,magic,0,arrow_color);
  if(ticket>0)
  {
    if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
      {
        Print("Sell order opened : ",OrderOpenPrice());
        return(0);
      }  
  }
  else 
  {
    Print("Error opening Sell order : ",GetLastError()); 
    return(-1);
  }
}

int init()
{
  return(0);
}

int deinit()
{   
  return(0);
}

int start()
{
  if((TimeHour(TimeCurrent())>TradeTime)) cantrade=true;  
  // проверяем есть ли открытые ордера ...
  if(OrdersTotal()<1)
  {
    // ... если нет ни одного открытого ордера, то идем дальше
    // проверяем настало ли время для торговли
    if((TimeHour(TimeCurrent())==TradeTime)&&(cantrade)&&(TimeDayOfWeek(TimeCurrent())!=dayout))
    {
      // ... если настало время, то
      if ((Open[t1]-Open[t2])>delta*Point) //Если цена изменилась на величину delta
      {
        //условие выполнено значит входим в короткую позицию:
        // проверяем есть ли свободные деньги для открытия короткой позиции
        if(AccountFreeMarginCheck(Symbol(),OP_SELL,lot)<=0 || GetLastError()==134)
        {
          Print("Not enough money");
          return(0);
        }
        OpenShort(lot);
        cantrade=false; //запрещаем торговать повторно до следующего бара
        return(0);
      }
      if ((Open[t2]-Open[t1])>delta*Point) //Если цена изменилась на величину delta
      {
        // условие выполнено значит входим в длинную позицию
        // проверяем есть ли свободные деньги на счету
        if(AccountFreeMarginCheck(Symbol(),OP_BUY,lot)<=0 || GetLastError()==134)
        {
          Print("Not enough money");
          return(0);
        }
        OpenLong(lot);
        cantrade=false;
        return(0);
      }
    }
  }   
  return(0);
}
このアドバイザーをどう思いますか?