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

 
alvlaf:

最後にあげたコードは一歩進んでいて、取引を全く行わない(だから禁止が効いている)のです。なぜ全くないのか、まだ理解できていません。ログのスクリーンショットを添付します。

当初はProfitableSerieという変数で、逆の機能を持っていました。そして、もうひとつ付け加えたいことがあります。

int OnInit()                     // abeiks && LRA: замечания приняты)))
{
   if (!GlobalVariableCheck("AllowNewOrders")) GlobalVariableSet("AllowNewOrders",1);
   return(INIT_SUCCEEDED);
}

// OnDeinit больше не нужен

void OnTick()
{
   if (CountTrades() == 0) // Количество ордеров должно равняться нулю
   {
      if ((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY))
      || (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL)))
      // Если последняя сделка убыточная, то открывается такая же, но с увеличенным лотом
      {
         GlobalVariableSet("AllowNewOrders", 0);
         Type = TypeLastHistOrder();
         if (Type == OP_BUY)  Price = Ask;
         if (Type == OP_SELL) Price = Bid;
         Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2);
         ticket = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
         return;
      }
      if (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0) 
      // Если прибыль последней сделки равняется нулю, то открывается такая же
      {
         GlobalVariableSet("AllowNewOrders", 0);
         Type = TypeLastHistOrder();
         if (Type == OP_BUY)  Price = Ask;
         if (Type == OP_SELL) Price = Bid;
         Lot = NormalizeDouble(LotsLastHistOrder(), 2);
         ticket = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
         return;
      }
      if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))
      || (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL)))
      || CountHistTrades() == 0)// Если последняя сделка прибыльная, то открывается ордер
      {
         if (GlobalVariableGet("AllowNewOrders") > 0) return;
         if (SignalBuy() && MaxOpenOrders > OrdersTotal())
         {
            ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic);
            if (ticket>0) GlobalVariableSet("AllowNewOrders", 0);
            return;
         }
         if (SignalSell() && MaxOpenOrders > OrdersTotal())
         {
            ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic);
            if (ticket>0) GlobalVariableSet("AllowNewOrders", 0);
            return;
         }
      }
      GlobalVariableSet("AllowNewOrders", 1);
   }
}

この方法で試してみてください。また何か出てきそうな予感が...。

 
こんにちは、私はMQL4チュートリアルを読み始めました(私はプログラミングを学びたい)、しかしそれは古いバージョンです、あなたは何をするように助言しますか? チュートリアルを読んで、次にドキュメントを読みますか?
 
LRA:
// ИХМО так нагляднее
同意見です!
 
linar:

こんにちは、私はMQL4チュートリアルを読み始めました(私はプログラミングを学びたい)、しかし、それは古いバージョンです、あなたは何をするように助言するでしょうか?

C言語でプログラミングをしたことがある人は、無料のインジケーターや簡易インジケーター、Expert Advisorのソースコードに目を通し、ヘルプを読むとよいでしょう。

全くプログラミングをしていないのであれば、...もし、あなたがプログラミングを全く知らないのであれば、ドキュメントを読んでください。)))

また、このフォーラムにチュートリアルがあります: https://www.mql5.com/ru/forum/108883

 
A13ksandr:

ただ、最初はProfitableSerieという変数で、逆の機能を持っていたんです。そして、もうひとつ付け加えることがあります。

この方法で試してみてください。また何か出てきそうな予感が...。

もう一歩前進 - ボットは1つの取引を開始しましたが、それで終わりです。他に何も開かず、試行錯誤のメッセージもログに残らない...。
 
alvlaf:
また一歩前進しました。ボットは1つの取引を開始しましたが、それで終わりでした。ボットは他に何も開かず、ログにも試行錯誤のメッセージはありません...。

コードの一部だけを正しく配置したかったのですが、その後、コード全体をコピーしても、エラーは直りませんでした。最後の条件ではこのようになるはずです。

         if (GlobalVariableGet("AllowNewOrders") == 0) return;

しかし、実はあの時、彼は1つも取引をすべきではなかったのです。最初の2つの条件のうち、いくつかは正しく動作していません。とりあえずコンディションを固定し、様子を見てみましょう :)

アップデイト:念のためOnDeinitを復活させる。

void  OnDeInit()
{
   GlobalVariableSet("AllowNewOrders",1); 
} 
 
A13ksandr:

くそー、もともと正しいコードの一部だけを挿入したかったのに、全部コピーしてしまって、このミスを修正していなかったんだ。最後の条件では、このようになるはずです。

しかし、実はあの時、彼は1つも取引をすべきではなかったのです。最初の2つの条件のうち、いくつかは正しく動作していません。とりあえずコンディションを固定し、様子を見てみましょう :)

アップデイト:念のためOnDeinitを復活させる。


試してみたところ、マイナスで1回取引した後、1ティックごとにポジションを 開くようになりました。
 
alvlaf:
試しに、マイナスで1回取引した後、1ティックごとにポジションを開くようにしました。

最初の2つの条件を1行目に書く

if(GlobalVariableGet("AllowNewOrders") == 1) return;

そして、最初のテストは1組で試してみてください。

ブローカーのGrandCapital?

 
A13ksandr:

最初の2つの条件を1行目に書く

if (GlobalVariableGet("AllowNewOrders") == 1) return;

そして、最初のテストは1組で試してみてください。

ブローカー GrandCapital?

//----------------------------------------------------------------------
int OnInit()
{
if (!GlobalVariableCheck("AllowNewOrders"))GlobalVariableSet("AllowNewOrders",1)。
return(INIT_SUCCEED);
}

//----------------------------------------------------------------------

void OnDeInit()
{
GlobalVariableSet("AllowNewOrders",1)。
}
//----------------------------------------------------------------------

void OnTick()
{
if (GlobalVariableGet("AllowNewOrders") == 1) return;
{
if (CountTrades() == 0) // 注文数はゼロに等しくなければなりません。
{
if ((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY))
|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL))
// 最後の取引が負けた場合、同じ取引が開始されますが、ロットは大きくなります。
{
GlobalVariableSet("AllowNewOrders", 0);
Type = TypeLastHistOrder();
if (Type == OP_BUY) Price = Ask;
if (Type == OP_SELL) Price = Bid;
Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2)です。
ticket = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
を返します。
}
if (GlobalVariableGet("AllowNewOrders") == 1) return;
{
if (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0)
//最後の取引の利益が ゼロに等しい場合、同じ取引が開始されます。
{
GlobalVariableSet("AllowNewOrders", 0);
Type = TypeLastHistOrder();
if (Type == OP_BUY) Price = Ask;
if (Type == OP_SELL) Price = Bid;
Lot = NormalizeDouble(LotsLastHistOrder(), 2)。
ticket = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
を返します。
}
if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))
|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL))
|| CountHistTrades() == 0)// 最後の取引で利益が出た場合、注文が開かれます。
{
if (GlobalVariableGet("AllowNewOrders") == 0) return;
if (SignalBuy() && MaxOpenOrders > OrdersTotal())
{
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic)です。
if (ticket>0) GlobalVariableSet("AllowNewOrders", 0);
を返します。
}
if (SignalSell() && MaxOpenOrders > OrdersTotal())
{
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic)です。
if (ticket>0) GlobalVariableSet("AllowNewOrders", 0);
を返します。
}
}
}
GlobalVariableSet("AllowNewOrders", 1);
}
}

}

そう、グランドキャピタルです。ちゃんと入れたか?また取引を開始しなくなった。

 

みんな、もう頭を悩ませているんだ。高値と安値、例えば8本のローソク足で、1/4の利食いでEAに保留注文を出させるにはどうしたらいいでしょうか。

こんな感じでやってます。

double Vhod1=iHighest(Symbol(),0,MODE_HIGH,8,0);

double Vhod2=iLowest(Symbol(),0,MODE_LOW,8,0);

double TP=((Vhod1-Vhod2)/4)+Vhod1;


パラメータを変更しようとしたが、間違ったストップが表示されたり、価格が7.00000に設定されたりして、どこから来ているのか不明である。