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

 
PapaYozh:


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

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


了解しました :-)Priceは、この関数内の実行がOrderSendに達したときのみアクセスされると思っていました。

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


了解です:-)Priceは、この関数内の実行がOrderSendに達したときのみアクセスされると思っていました。

今が正念場って感じですね(^^)))


そうだと思います。
 
int BlackOrWhite(int countbar)
{
int result_=0;
 
if (iClose(NULL,0,countbar)-iOpen(NULL,0,countbar))
result_=1;
else
result_=-1;
 
if (iOpen(NULL,0,countbar)==iClose(NULL,0,countbar))
result_=0;
 
return(result_);
}

関数が、なぜか1つの値しか与えない + コンパイラが悪態をつく :

'iClose' - 期待される比較表現

何が問題なのか理解できない。

if(BlackOrWhite(1)>0)
      {
ということで、番組内で使ってください。
 
nuan:

関数を呼び出すと、何らかの理由で値が1つしか与えられず、コンパイラは顔をしかめる。

'iClose' - 期待される比較表現

何が問題なのか理解できない。

私のアプリケーションでは、このように使っています。



if (iClose(NULL,0,countbar)-iOpen(NULL,0,countbar)>0)
   result_=1;
else
   result_=-1;

あるいは、次のようになります。

if (iClose(NULL,0,countbar)>iOpen(NULL,0,countbar))
   result_=1;
else
   result_=-1;
 
PapaYozh:

そうだと思います。

すべてうまくいっているようです、ありがとうございます。
 
ありがとうございました。
 

こんにちは。助けてほしいんです。問題はこれだ。

注文が発生したら、どのような方法であれ、他のすべての注文を閉じる必要があります。そしてまた、新しいものが開かれるはずの条件によって。

 
sergey_r:

こんにちは。助けてほしいんです。問題はこれだ。

注文が発生した後は、他のすべての注文を終了させる必要があります。そしてまた、新しいものを開くことが条件となる。


この 時点で教科書は読んでいるのか?
 

これまで使ってきたのは

static bool order_opened = false;

if(order_opened){return(0);}。

OrderSend(Symbol(),OP_BUYLIMIT,0.1,cena_buy,3,sl_buy,tp_buy,"",14774,0,Blue);
Alert (GetLastError()); // 注文発注時のエラー 表示
order_opened = true; // 注文が成功したら再度オープンしないようにすること。

さて、注文がうまくいった後に、新たに注文を出すことになりました。


 
sergey_r:

これまで使ってきたのは

static bool order_opened = false;

if(order_opened){return(0);}。

OrderSend(Symbol(),OP_BUYLIMIT,0.1,cena_buy,3,sl_buy,tp_buy,"",14774,0,Blue);
Alert (GetLastError()); // 注文発注のエラーメッセージ
order_opened = true; // もし注文が成功したら再度オープンしないようにすること。

あとは、注文がうまくいった後に、新しい注文を出すだけです。



チュートリアルとドキュメントを読み、ポーズ条件によって開く、閉じるのロジックを変更し、CTRL+ALT+Mでコードを挿入 します。