[ARCHIVE] フォーラムを散らかさないように、どんなルーキーでも質問してください。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 3. - ページ 46

 
rustein:

質問はいったいどこにあるのでしょうか?
 
ilunga:
質問はいったいどこにあるのでしょうか?
https://www.mql5.com/ru/forum/115354/page78
 

で、注文が1つしかない場合は、ループが1つになります。

for(;Cnt>=0;Cnt--)
    {
      RefreshRates();
      OrderSelect(Cnt,SELECT_BY_POS);
      if(OrderMagicNumber()==Magic)
      {
      TotalOpenOrders++;
      }
    }

初回は、存在しないオーダーを選択しようとします

 
ilunga:

上記のコードでは、注文が1つしかない場合、ループは

初回は、存在しないオーダーを選択しようとします

ありがとうございます、自分でも訂正します。
 
artmedia70:
端末は深い思考に入り、約15分後、私はそれを殺した。
なーんにも
私なら1分も待たずに殺していただろう。
 
PapaYozh:

AskとBidを使用する直前にRefreshRates()を実行する。


試してみたが、何も変化がない

注文送信機能、すべて標準のようです

 int OpenPosition(string AdvisorName,int Position,int Magic,double Lots,double StopLoss){ 
 int N; int Сount = 5; int Slippage = (CalculateSpread() * 2); 
 string PeriodString = GetPeriod(Period());
 if(Position == OP_BUY){double Price = NormalizeDouble(Ask,Digits); 
 string OrderName = " - Покупка по рынку";
 string ErrorName = "Ошибка открытия ордера на покупку";
 string CriticalErrorName = "Невозможно открыть ордер на покупку";
 string MailCriticalErrorName = "Ошибка открытия"; color Arrow = Gold;}
 if(Position == OP_SELL){Price = NormalizeDouble(Bid,Digits); 
 OrderName = " - Продажа по рынку"; ErrorName = "Ошибка открытия ордера на продажу";
 CriticalErrorName = "Невозможно открыть ордер на продажу";
 MailCriticalErrorName = "Ошибка открытия"; Arrow = YellowGreen;}
 
 while(IsTradeContextBusy() || !IsTradeAllowed()){int Interval = MathRand()+1000; 
 Print("Торговый поток занят. Повторная проверка через "+DoubleToStr((Interval/1000),0)+" сек"); 
 Sleep(Interval);} RefreshRates(); while(N < Сount){RefreshRates(); 
 int Ticket = OrderSend(Symbol(),Position,Lots,Price,Slippage,StopLoss,0,AdvisorName+
 OrderName,Magic,0,Arrow);
 if(Ticket > 0){if(OrderSelect(Ticket,SELECT_BY_TICKET,MODE_TRADES)){int Flag = 1; 
 PlaySound("recharge.wav"); break;}}
 else{Flag = 0; int PRM = GetLastError(); string ERR = Error(PRM,"OrderSend()"); 
 ErrorProcessing(AdvisorName+" "+PeriodString,ErrorName+" "+PRM+" ("+
 Error(PRM,"OrderSend()")+")","","OrderSend()"); N++; Sleep(5000);}
 if(N == Сount){ErrorProcessing(AdvisorName+" "+PeriodString,CriticalErrorName,
 MailCriticalErrorName+" "+PRM+" ("+Error(PRM,"OrderSend()")+")","OrderSend()");}}
 return(Flag);}
 
Dimoncheg:


試してみたが、何も変化がない。

注文送信機能、すべて標準装備のようです


まず、RefreshRates()関数で価格を更新し、必要な価格をPriceに格納します。

そして、Sleep(Interval)を実行すると、この時に相場が変化します。

その後、一昨年の見積もりでOrderSend()を呼び出します

それに対して何を期待しますか?

 
PapaYozh:


まず、RefreshRates()という関数で価格を更新し、必要なものをPriceに格納します。

そして、Sleep(Interval)を実行すると、そのタイミングで相場が変化します。

そしてその後、一昨年の見積もりでOrderSend()を呼び出すのです。

それに対して何を期待しますか?


私の悪い、私は間違った場所に少し近代化、今私は、関数の外に価格を移動しました

OpenPosition("Sovetneg",OP_BUY,NormalizeDouble(Ask,Digits),Magic,SlowlyIncreasingLots(0.2),MultiStop(OP_BUY,StopLoss));
この関数自体は、現在
 int OpenPosition(string AdvisorName,int Position,double Price,int Magic,double Lots,double StopLoss){ 
 int N; int Сount = 5; int Slippage = (CalculateSpread() * 2); 
 string PeriodString = GetPeriod(Period());
 if(Position == OP_BUY){
 string OrderName = " - Покупка по рынку";
 string ErrorName = "Ошибка открытия ордера на покупку";
 string CriticalErrorName = "Невозможно открыть ордер на покупку";
 string MailCriticalErrorName = "Ошибка открытия"; color Arrow = Gold;}
 if(Position == OP_SELL){
 OrderName = " - Продажа по рынку"; ErrorName = "Ошибка открытия ордера на продажу";
 CriticalErrorName = "Невозможно открыть ордер на продажу";
 MailCriticalErrorName = "Ошибка открытия"; Arrow = YellowGreen;}
 
 while(IsTradeContextBusy() || !IsTradeAllowed()){int Interval = MathRand()+1000; 
 Print("Торговый поток занят. Повторная проверка через "+DoubleToStr((Interval/1000),0)+" сек"); 
 Sleep(Interval);} while(N < Сount){RefreshRates(); 
 int Ticket = OrderSend(Symbol(),Position,Lots,Price,Slippage,StopLoss,0,AdvisorName+
 OrderName,Magic,0,Arrow);
 if(Ticket > 0){if(OrderSelect(Ticket,SELECT_BY_TICKET,MODE_TRADES)){int Flag = 1; 
 PlaySound("recharge.wav"); break;}}
 else{Flag = 0; int PRM = GetLastError(); string ERR = Error(PRM,"OrderSend()"); 
 ErrorProcessing(AdvisorName+" "+PeriodString,ErrorName+" "+PRM+" ("+
 Error(PRM,"OrderSend()")+")","","OrderSend()"); N++; Sleep(5000);}
 if(N == Сount){ErrorProcessing(AdvisorName+" "+PeriodString,CriticalErrorName,
 MailCriticalErrorName+" "+PRM+" ("+Error(PRM,"OrderSend()")+")","OrderSend()");}}
 return(Flag);}
今はちゃんと見えているのでしょうか?
 

こんにちは。

type==4とはどういう意味か教えてください。

およびタイプ==5

を以下のスニペットに追加しました。

double ma=iMA(Symbol(),PERIOD_D1,21,0,MODE_SMA,PRICE_CLOSE,0);

for(int k=1; k<=OrdersTotal(); k++)
bool select=OrderSelect(k-1,SELECT_BY_POS);

if(select)
{
int type=OrderType();
int ticket=OrderTicket();

if (Bid<ma && type==4)
OrderDelete(ticket);
if (Bid>ma && type==5)
OrderDelete(ticket);
} (但し、BID:ma,type:5,type:5,type:5)。

注文を削除するための条件は、MAによって明確に理解されていますが、一緒にどのように?

ありがとうございます。

 
Dimoncheg:


今はそう思えませんか?


いいえ、そんなことはありません。さらに悪くなった :)

RefreshRates()は、あらかじめ定義された AskとBidの変数の値を更新するので、一度Price変数に格納された値を使用していることを理解してください。