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

 
Dimka-novitsek:
ループが組めない、XとYが常に0になる。

まず、心の中のゴミを片付けます。

コードを 美しく、構造化する。

そして、コメントを欲張らないことです。

 

はい、もちろんです。

私はまず、必要なマジックナンバーとその通貨ペアの注文を選択します。if( 注文マジックナンバー( )==2000 &&注文シンボル( )==シンボル( ))){

次にループ for( i=OrdersTotal();i==0;i--) で、次のように注文を選択します OrderSelect(i,SELECT_BY_POS ); そしてOP_SELLSTOPとして何件の注文をカウントします。

注文がない場合は、存在しない注文種別の注文をオープンします。上段ループの変数Xと下段ループの変数Yで必要なタイプのオーダーをカウントする。どちらのループも、構造も目的も同じです。

私はすでに説明と書いているが、ここで父が来て、呼ばれ、ミルク、紅茶、ハルバを持って、私はメッセージを送信していない、私はおしっこに行き、私の父は、未送信のメッセージを消去し、言った、しかし何、あなたは別の検索エンジンウィンドウで書くことができますか?ネトルペーストって何だろうと思い、ちょっとビビッてほとんど説明もなく送信してしまいました。

まあ、XとYは常に0なんですけどね。forループが動作していないのでしょう。このため、注文は1ティック ごとに2つずつ開くのですが、何がうまくいかないのか全く理解できていません。


 
Dimka-novitsek:

はい、もちろんです。

私はまず、必要なマジックナンバーとその通貨ペアの注文を選択します。if( 注文マジックナンバー( )==2000 &&注文シンボル( )==シンボル( ))){

次にループ for( i=OrdersTotal();i==0;i--) で、次のように注文を選択します OrderSelect(i,SELECT_BY_POS ); そして、OP_SELLSTOPとして注文数をカウントするのです。

注文がない場合は、存在しない注文種別の注文をオープンします。上段ループの変数Xと下段ループの変数Yで必要なタイプのオーダーをカウントする。どちらのループも、構造も目的も同じです。

私はすでに説明と書いているが、ここで父が来て、呼ばれ、ミルク、紅茶、ハルバを持って、私はメッセージを送信していない、私はおしっこに行き、私の父は、未送信メッセージを消去し、言った、しかし何、あなたは別の検索エンジンウィンドウに書くことができますか?ネトルペーストって何だろうと思い、ちょっとビビッてほとんど説明もなく送信してしまいました。

まあ、XとYは常に0なんですけどね。forループが動作していないのでしょう。要するに、何がうまくいっていないのか全く理解できないのですが、注文が各ティックで2つずつ開くようになっています。


まさにその通り、forループは必要なことをやってくれません。

次のようになります: for( i=OrdersTotal();i==0;i--)

1) 注文が0件の場合、ループは1回実行されます。この場合、未知なるものを選択し、それで未知なるものを行うことになる =)。

2) オーダーが0件以上ある場合は、「i==0」の条件を満たさないため、ループは全く開始されない

 
ありがとうございます!!!ちょっともう一度参考文献を読み直してみます!
 
はい!ありがとうございます!!!
 
Ds......あのね、うまくいかないんだよ、全部同じなんだよ。
//+------------------------------------------------------------------+
//|                                                    для лавин.mq4 |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
extern double stoploss=0; extern double takeprofit=20;extern int otstup=20; extern datetime expiration=0;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
 int tiket,tikett;double volume=0.1;int i=0,R1=0,R2=0,A=1 ;double price=PRICE_OPEN;
   //  R1=((PRICE_OPEN- stoploss*Point)*stoploss)/stoploss;R2=((PRICE_OPEN+ stoploss*Point)*stoploss)/stoploss;
     
     
int start()
  {       int X,Y; double price=(Ask+Bid)/2;            
//----
       Alert ("OrdersTotal()",OrdersTotal());

if(OrderSymbol()==Symbol()&&OrderMagicNumber( )==1000){
 for(int i=OrdersTotal();i>0;i--){Alert ("i", i);
OrderSelect(i,SELECT_BY_POS );if(OrderType( )==OP_BUYSTOP){X++;}}}Alert ("X", X);
if (X==0){


   tiket= OrderSend( Symbol(), OP_BUYSTOP,  volume*A, price +otstup*Point, Point* 3, R1, price+takeprofit*Point+otstup*Point, "OP_BUYSTOP", 1000,  expiration, Red); 
   Alert ("OP_BUYSTOP", GetLastError( )); }
   
if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()) { 
 for ( i=OrdersTotal();i>0;i--){Alert ("i", i); OrderSelect(i,SELECT_BY_POS );
if(OrderType( ) ==OP_SELLSTOP) { Y++;}}}Alert ("Y", Y);
 if (Y==0){ 
   tikett= OrderSend( Symbol(), OP_SELLSTOP,  volume*A, price -otstup*Point, Point* 3,R2, price-takeprofit*Point-otstup*Point, "OP_SELLSTOP" , 2000,  expiration,C'0,128,255' );
    Alert ("OP_SELLSTOP", GetLastError( )); 
    }       
   
//----
   return(0);
  }
//+-------------------------------------------
ヘルプには次のように書かれています。

Expression2は、ループの終了条件をチェックするものです。真であれば、for ループ本体演算子が実行される。

などまた、i=OrdersTotal() の代わりに i=5 を入れてみましたが、何も変わらず、ループは動きません。
 
Dimka-novitsek:
ヘルプテキストによると

Expression2は、ループの終了条件をチェックするものです。trueの場合、for ループ本体演算子が実行される。

などまた、i=OrdersTotal() の代わりに i=5 を入れてみましたが、何も変わらず、ループは動きません。

そうか、ループはループにならないんだ。

if(OrderSymbol()==Symbol()&&OrderMagicNumber( )==1000){
 for(int i=OrdersTotal();i>0;i--){Alert ("i", i);

注文記号(どの注文?たくさんある...あるいは全くない)が現在の注文と等しく、その魔法(どの魔法?)が1000に等しければ、ループを実行する」と書いてありますね。

で、「ループを開始する」必要があります。その中で、1)注文を選択 する。2) and if symbol =... and magic =1000, then X++;".

 

実際のアカウントでは、シンボル名に「.」や「FXF」など、さまざまなプレフィックスを付与しているDCもあります。

これらの接頭辞はどのように使えばよいのでしょうか?

私はこのようにしました。

#define DEF_SPEC "FXF"

string SymbolsTrade[] = {"AUDCAD "DEF_SPEC ...-動作しない

string SymbolsTrade[] = {"AUDCAD "+DEF_SPEC ...-そんなこともない

その結果、AUDCADFXFの代わりにFXFが表示されるようになりました。

どのように実装すればよいか教えてください。
 
pusheax:

実際のアカウントでは、シンボル名に「.」や「FXF」など、さまざまなプレフィックスを付与しているDCもあります。

これらの接頭辞はどのように使えばよいのでしょうか?

こんなことをしました。

#define DEF_SPEC "FXF"

string SymbolsTrade[] = {"AUDCAD "DEF_SPEC ...-動作しない

string SymbolsTrade[] = {"AUDCAD "+DEF_SPEC ...-そんなこともない

その結果、AUDCADFXFの代わりにFXFが表示されるようになりました。

どのように実装すればよいか教えてください。

まあ、その場その場でどうにかなるものです。

#define DEF_SPEC "FXF"
string SymbolsTrade[] = {"AUDCAD", "EURUSD"};

int init()
{
   for (int i = 0; i < ArraySize(SymbolsTrade); i++)
      SymbolsTrade[i] = SymbolsTrade[i] + DEF_SPEC;
 

了解です、やりますね...。

また、コンディションがうまくいかない。

OrderSelect(i,SELECT_BY_POS );
if(OrderType( ) ==OP_SELLSTOP) { Y++;}Alert ("Y", Y);}