どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 78

 
優先順位の高い順にご回答ください。棒グラフで表示するインジケータがあるのですが、どうすればいいですか?加入時や再接続時には、オプペンの値が表示されます。最初のスタートで、配列の0番目のセルをリセットする条件を設定しました。そして、私はそれをiniteに設定しました - それは助けられませんでした。起動時にリセットした - OK(最初に if(GetLastError()==6)zas[0]=0.0; という条件をつけてみたが、うまくいかない。
 
dikson1976-1:
優先順位の高い順にご回答ください。棒グラフで表示するインジケータがあるのですが、どうすればいいですか?加入時や再接続時には、オプペンの値が表示されます。最初のスタートで、配列の0番目のセルをリセットする条件を設定しました。そして、私はそれをiniteに設定しました - それは助けられませんでした。起動時にリセットした - OK(最初に if(GetLastError()==6)zas[0]=0.0; という条件をつけてみたが、うまくいかない。

コードなしではやっていけない。
 

ドーゾル



順番を逆にしてみてください。

 for(i=OrdersTotal()-1;i>=0;i--)
      {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
         {
     // и тд
         }
       }
 
自分で処理した。無理しないでね。皆さん、ありがとうございました。
 
Dozol:

友よ、助けてくれ。選択した通貨ペアですべての注文を決済したいのですが、どうすればいいですか?以下は、私が書いたものです(EAコードの一部)。

int Zakrit_vse() ...

SRCを使用してフォーラムにコードを貼り付ける

ここに貼り付けておきます。もしかしたら、皆さんも何か面白い発見があるかもしれません。

int Zakrit_vse()
{  
if (OrdersTotal()>0)
{  for (int i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {  if (OrderSymbol()!=Symbol()) continue;
      
         //--- Close pending orders
         if (OrderType()==OP_BUYLIMIT  ||
             OrderType()==OP_BUYSTOP   ||
             OrderType()==OP_SELLLIMIT ||
             OrderType()==OP_SELLSTOP)         
         {  
            OrderDelete(OrderTicket(),CLR_NONE)
            Prov_oshibok();
            return(0);
         }
         
         //--- Close opened position BUY
         if (OrderType()==OP_BUY)
         {
            RefreshRates();
            OrderClose(OrderTicket(),OrderLots(),Bid,100,CLR_NONE);
            Prov_oshibok();
            return(0);
         }
         //--- Close opened position SELL
         if (OrderType()==OP_SELL)
         {
            RefreshRates();
            OrderClose(OrderTicket(),OrderLots(),Ask,100,CLR_NONE);
            Prov_oshibok();
            return(0);
         }
}  }  }
}
 
Dozol:

友よ、助けてくれ。選択した通貨ペアですべての注文を決済したいのですが、どうすればいいですか?以下は、私が書いたものです(EAコードの一部)。


すでにすべてがあなたの前に発明されているのに、なぜ車輪を再発明するのでしょう。例えば、こんな感じです。これを忘れては いけない。
 

助けて私は、外部チャネルインジケータ(チャネルの上限に達したとき、取引は売りのために開き、下限に達したときに閉じて、逆の順序で購入する)のためのコードを持っています。原因不明のまま、トレードを開けない、エラーが見つからない。別のチャンネルインジケータで完全に動作します。すべてのバッファが設定されていることをすぐに指定したいのですが。

そのコードを添付します。

extern double Lots = 0.1;
extern string Comment = "TMA Canal2";
extern int TakeProfit = 20;
extern int StopLoss = 20;
extern int Slippage = 2; // スリッページ
extern int Magic = 124;

extern string Indi = "インジケーターデータ";
extern string TimeFrame = "現在のタイム フレーム;
extern int TMAPeriod = 56;
extern int Price = PRICE_CLOSE;
extern double ATRMultiplier = 2.0;
extern intTRPeriod = 100;
extern double TrendThreshold = 0.5;
extern bool ShowCenterLine = false;

Double PriceHigh, PriceLow, SL, TP;
int ticketです。

//+------------------------------------------------------------------+
//| エキスパート初期化関数
//+------------------------------------------------------------------+
int init()
{
if (Digits ==3 || Digits ==3) // 5桁のブローカーの場合
{
TakeProfit *= 10;
StopLoss *= 10;
スリッページ *= 10;
}
return(0)です。
}

//+------------------------------------------------------------------+
///オープンポジションの計算
//+------------------------------------------------------------------+
int CalculateCurrentOrders(文字列シンボル)
{
int buys=0,sells=0;
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)ブレーク。
if(OrderSymbol()==Symbol() && OrderMagicNumber()==124)
{
if(OrderType()==OP_BUY) buys++;
if(OrderType()==OP_SELL) sells++;
}
}
//---- リターンオーダー数
if(buys>0) return(buys);
else return(-sells);
}

//+------------------------------------------------------------------+
//| 開注文条件のチェック
//+------------------------------------------------------------------+
void CheckForOpen()
{
Double PriceHigh, PriceLow;
int ticketです。
//---- 新しいバーの最初のティックの間だけ取引に行く
if(音量[0]>1) return;

PriceHigh = iCustom (Symbol(), 0, "TMALine", TimeFrame, TMAPeriod, Price, ATRMultiplier, ATRPeriod, TrendThreshold, ShowCenterLine, 1, 0)です。
PriceLow = iCustom (Symbol(), 0, "TMALine", TimeFrame, TMAPeriod, Price, ATRMultiplier, ATRPeriod, TrendThreshold, ShowCenterLine, 2, 0)です。


if(Open[1]>PriceHigh || Close[1]>PriceHigh || High[1]>PriceHigh && Ask<=PriceHigh)

{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0, "TMA Canal2",124,0,Red) です。
を返します。
}
//---- 買付条件
if(Open[1]<PriceLow || Close[1]<PriceLow || Low[1]<PriceLow && Bid>=PriceLow)

{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0, "TMA Canal2",124,0,Blue) です。
を返します。
}
//----
}
//+------------------------------------------------------------------+
//|寄り付き注文の条件をチェックする|||etc.
//+------------------------------------------------------------------+
void CheckForClose()
{
Double PriceHigh, PriceLow;
//---- 新しいバーの最初のティックの間だけ取引に行く
if(音量[0]>1) return;

PriceHigh = iCustom (Symbol(), 0, "TMALine", TimeFrame, TMAPeriod, Price, ATRMultiplier, ATRPeriod, TrendThreshold, ShowCenterLine, 1, 0)です。
PriceLow = iCustom (Symbol(), 0, "TMALine", TimeFrame, TMAPeriod, Price, ATRMultiplier, ATRPeriod, TrendThreshold, ShowCenterLine, 2, 0)です。

for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)ブレーク。
if(OrderMagicNumber()!=124 || OrderSymbol()!=Symbol()) continue;
//---- チェックオーダータイプ
if(OrderType()==OP_BUY)
{
if(Open[1]>PriceHigh || Close[1]>PriceHigh || High[1]>PriceHigh) OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
が壊れる。
}
if(オーダータイプ()==OP_SELL)
{
if(Open[1]<PriceLow || Close[1]<PriceLow || Low[1]<PriceLow) OrderClose(OrderTicket(),OrderLots(),Ask,3,White).Open[1]<PriceLow|Low[1]の場合。
が壊れる。
}
}
//----
}

//+------------------------------------------------------------------+
//| 機能開始
//+------------------------------------------------------------------+
void start()
{
//---- 履歴と取引を確認する
if(Bars<100 || IsTradeAllowed()==false) return;
//---- 現在のシンボルで未決済注文を計算する
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
else CheckForClose()。
//----
}
//+------------------------------------------------------------------+

 
ZahvatkiN:

私はmql4の初心者です。SLとTPを扱うのは得意ですが、インジケータからのクロスシグナルで注文を閉じる必要があるときに問題があります。 OrderSelect()関数がどのように動作するかよく分かりません。私は順序を検索するために、我々はループを使用することを知って、それはコードにありますが、取引の過程でそれは順序がちょうど開いたとすぐに閉じていることが判明、買いを開くための条件は売りを閉じるための条件と一致しているので、これは私が理解していない行うべきではありませんそれを説明する方法、説明をしてください。

SRC ボタンは、コードの貼り付けに 使用します

書いたら、Documentationを使って 追加してください。

コピーされた方は、修正または作者にご連絡くださいWork!

 


もう一回付け加えます。何度言ったらわかるんだ、コードを挿入するには、一番上の行にあるボタンを使うんだ。

そして、コードの書き方に こだわることが望ましいのですが......。望ましいが、必須ではない。しかし、多くの人はわかりやすいコードで返事をする方が多いのです。

 

私はmql4の初心者です。SLとTPの使い方は知っていますが、インジケータのカウンターシグナルで注文を閉じる必要があるときに問題があります。 OrderSelect()関数がどのように機能するかよく理解していません。私はループが注文を検索するために使用されていることを知っている、それはコードにありますが、取引の過程で、それはちょうど注文が開いて、すぐに閉じていることが判明し、買いを開くための条件は、売却を閉じるための条件と一致しているので、これは私が理解していない行うべきではありませんそれを説明する方法、説明をしてください。

borilunad ヒントをありがとう、それをやり直し、そして、あなたはまた、それを乱雑にしないように、引用とそのメッセージを削除することができます。

if(buy1sOpen())
         {
         OrderSend(Symbol(), OP_BUY, lots, Ask, Slippage, 0, 0, "", magic, 0, Blue);
         }
      if(sell1sOpen()) 
         {
         OrderSend(Symbol(), OP_SELL, lots, Bid, Slippage, 0, 0, "", magic, 0, Red);
         }
         
      for(int i=0; i<OrdersTotal(); i++)
         {
         OrderSelect(i,SELECT_BY_POS);
         if(buy1sClose()) 
           {
           OrderClose(i, lots, Ask, Slippage, Blue);
           }
         if(sell1sClose()) 
           {
           OrderClose(i, lots, Bid, Slippage, Red);
           }
         }
         
      }
   }
bool buy1sOpen()
   {
   Sm1=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_MAIN,1);
   Ss1=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_SIGNAL,1);
   Sm2=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_MAIN,2);
   Ss2=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_SIGNAL,2);
   if(Sm1>Ss1 && Sm2<Ss2 && Sm1<30)
      return(true);
      return(false);
   }
bool sell1sOpen()
   {
   Sm1=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_MAIN,1);
   Ss1=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_SIGNAL,1);
   Sm2=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_MAIN,2);
   Ss2=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_SIGNAL,2);
   if(Sm1<Ss1 && Sm2>Ss2 && Sm1>70)
      return(true);
      return(false);
   }
bool buy1sClose()
   {
   Sm1=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_MAIN,1);
   Ss1=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_SIGNAL,1);
   Sm2=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_MAIN,2);
   Ss2=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_SIGNAL,2);
   if(Sm1<Ss1 && Sm2>Ss2 && Sm1>70)
      return(true);
      return(false);
   }
bool sell1sClose()
   {
   Sm1=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_MAIN,1);
   Ss1=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_SIGNAL,1);
   Sm2=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_MAIN,2);
   Ss2=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_SIGNAL,2);
   if(Sm1>Ss1 && Sm2<Ss2 && Sm1<30)
      return(true);
      return(false);
   }