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

 
sting-igor:
DoCは取引回数に制限があるのか?

案件数の 制限だけでなく、依頼数の制限まで設けているところもあります。

彼らは発明家です。:-))

 
こんにちは。
前回は注文の開始について質問させていただきましたが、今回は注文の終了について質問させていただきます(笑)。
以下は、注文をオープンしたりクローズしたりする関数を含むコードの一部です。
Expert Advisor が動作しているとき、次のような「特異性」が発生します。たとえば、10種類の注文が出され、そのうちの2つが途中で閉じられるというものです。

残りの注文はテスト終了まで開いたままですが、ある注文が開かれると、条件付きでその注文が閉じられるはずです。

........................
magick=MathRand(); 
     
     if(NewBar())
 {     

  //---- Условие SELL
if(MAarrUP1[j]>0.35 && MAarrUP2[j]>1.8)
     {
 closeDnOrd();OrderSend(Symbol(),OP_SELL,0.1,Bid,3,0,0,0,magick,0,Blue);
     } 
  
  //---- Условие BUY
    if(MAarrDN1[j]<-0.35 && MAarrDN2[j]<-1.8)
    {
closeUpOrd();OrderSend(Symbol(),OP_BUY,0.1,Ask,3,0,0,0,magick,0,Red);
     }
}
............
//--------------------------------------------------------- Функции

//----- Функция закрытия селл

void closeUpOrd()
  {
  for(int i=0;i<=OrdersTotal();i++)
      {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)        break;
      if(OrderMagicNumber()!=magick || OrderSymbol()!=Symbol()) continue;

  if(OrderType()==OP_SELL)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE);
}
      } 
    }

//---- Функция закрытия бая

void closeDnOrd()
  {
  for(int i=0;i<=OrdersTotal();i++)
      {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)        break;
      if(OrderMagicNumber()!=magick || OrderSymbol()!=Symbol()) continue;

 if(OrderType()==OP_BUY)
{
 OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE);
}
      } 
  }

OrderClose()使用時のエラー4051と134についてもう一つ質問ですが、これはどういう意味ですか?ログから情報をコピーしました。

02:54:37 2010.10.17 23:16  Ti&Pi_Speeder_Exp AUDUSD,M1: invalid ticket for OrderModify function
02:54:37 2010.10.17 23:16  Ti&Pi_Speeder_Exp AUDUSD,M1: OrderModify error 4051


02:54:37 2010.10.17 23:22  Ti&Pi_Speeder_Exp AUDUSD,M1: OrderSend error 134

 
Vinin:

最後の選択肢は、多かれ少なかれうまくいったように思います。計算を簡略化することは可能ですが
iMAOnArray関数を別のループにした理由を教えてください。
 

アドバイスお願いします同じマジックで、異なるロットの2つの注文を 閉じるにはどうすればよいですか?


int start() { double MyLastBullOpenPrice=0; for(int Cnt=0;Cnt<OrdersTotal();Cnt++){ OrderSelect(Cnt,SELECT_BY_POS,MODE_TRADES); if(OrderMagicNumber()==12345 && OrderType()==OP_BUY){ MyLastBullOpenPrice=OrderOpenPrice(); double Cena=OrderOpenPrice()+5*Point; double Totalcena=Bid;










if (Totalcena>Cena)
{
if (OrdersTotal()>0)
{ for (int i=OrdersTotal()-1; i>=0; i--)
{ if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{ if(OrderMagicNumber()==12345)

{ if(OrderDelete(OrderTicket())==true)の場合
{
Print("Error = ",GetLastError()); return(0);
}.
} }
}
}

return(MyLastBullOpenPrice);
}.

 
Fox_RM:
こんにちは。
前回は注文の開始について質問させていただきましたが、今回は注文の終了について質問させていただきます(笑)。
以下は、注文をオープンしたりクローズしたりする関数を含むコードの一部です。
Expert Advisor が動作しているとき、次のような「特異性」が発生します。たとえば、10種類の注文が出され、そのうちの2つが途中で閉じられるというものです。

残りの注文はテスト終了まで開いたままですが、ある注文が開かれると、条件付きでその注文が閉じられるはずです。

OrderClose()使用時のエラー4051と134についてもう一つ質問ですが、これはどういう意味ですか?ログから情報をコピーしました。

134 - 金銭がない、4051 - 関数に渡されたパラメーターに問題がある。

そうでなければ、すべてのオーダーが独自のマジックを持つことになり、あなたの言うような結果になります。

 

配列を介して文字列中の文字置換機能を追加(または記述)したいのですが、ご教授ください。

文字の配列が2つある。

stringsymbols1[] = {"a", "b", "c", "d"};
string symbols2[] = {"1", "2", "3", "4"}とする。


配列を元に、テキストbadcを2143に置き換える関数を書いてみたところ、以下のような結果になりました。

string ReplaceSymbolsInStr(string text){
string textMod[] ={""};
string symbols1[] = {"a","b","c","d"};
string symbols2[] = {"1","2","3","4"};
int textLen = StringLen(text);
for (int i1=0; i1<textLen; i1++)
{
string OneSymbol = StringSubstr(text,i1,1);

for (int i2=0; i2<ArraySize(symbols1); i2++)
{
if (symbols1[i2]==OneSymbol) int PosSymbolIn1array=i2;
}
return(-1);

string OneSymbolMod = symbols2[PosSymbolIn1array];
int NewArraySize = ArraySize(textMod)+1;
ArrayResize(textMod,NewArraySize);
textMod[i1]=OneSymbolMod;
string textNew;
textNew=StringConcatenate(textMod[1],textMod[2]...);//собрать массив в строку вообще не могу :(
return (textNew);
}
}

間違っているのは分かっているのですが、配列を文字列に組み立てることが全くできないのです。よろしくお願いします。

 
Zhunko:

案件数の制限だけでなく、依頼数の制限まで設けているところもあります。

彼らは発明家です。:-))

って、何かブロックがあるんですか?
 
Lians:

配列を介して文字列中の文字置換機能を追加(または記述)したいのですが、ご教授ください。

文字の配列が2つある。

string symbols1[] = {"a", "b", "c", "d"};
string symbols2[] = {"1", "2", "3", "4"}.


配列を元に、テキストbadcを2143に置き換える関数を書いてみたところ、以下のような結果になりました。

string ReplaceSymbolsInStr(string text){
string textMod[] ={""};
string symbols1[] = {"a","b","c","d"};
string symbols2[] = {"1","2","3","4"};
int textLen = StringLen(text);
for (int i1=0; i1<textLen; i1++)
{
string OneSymbol = StringSubstr(text,i1,1);

for (int i2=0; i2<ArraySize(symbols1); i2++)
{
if (symbols1[i2]==OneSymbol) int PosSymbolIn1array=i2;
}
return(-1);

string OneSymbolMod = symbols2[PosSymbolIn1array];
int NewArraySize = ArraySize(textMod)+1;
ArrayResize(textMod,NewArraySize);
textMod[i1]=OneSymbolMod;
string textNew;
textNew=StringConcatenate(textMod[1],textMod[2]...);//собрать массив в строку вообще не могу :(
return (textNew);
}
}

間違っているのは分かっているのですが、配列を文字列に組み立てることが全くできないのです。よろしくお願いします。

置換配列の中から文字のインデックスを見つけたはずなのに、なぜ別の配列を作るのでしょうか?

最初のループでプレーンテキスト変数に追加してみてください。

string ReplaceSymbolsInStr(文字列テキスト)

{


文字列 symbols1[] = {"a", "b", "c", "d"};

string symbols2[] = {"1", "2", "3", "4"};

文字列 textNew="";

int textLen = StringLen(text)。

for (int i1=0; i1<textLen; i1++)
{
string OneSymbol =StringSubstr(text,i1,1);

for (int i2=0; i2<ArraySize(symbols1); i2++)

{
if (symbols1[i2]==OneSymbol) {textNew = textNew + symbols2[ i2 ] ; i2=A rraySize(symbols1) ; } } {textN ew = textNew + symbols2[ i2 ]; i2=ArraySize(symbols1)

}

}

return (textNew);

}

 


あるいは、もっと簡単なこんな感じです。

string ReplaceSymbolsInStr(文字列テキスト)

{


string symbols1[4] = {"a", "b", "c", "d"}; // シンボルの数だけ配列の大き さを変更する。

文字列 textNew="";

for (int i1=0; i1< StringLen(text) ; i1++)

{
string OneSymbol = StringSubstr(text,i1,1);

for (int i2=0; i2<ArraySize(symbols1); i2++)

{
if (symbols1[i2]==OneSymbol )

{

textNew = textNew + (i2+1); // 返されたテキストにシンボル自体の番号が追加 されます。

i2=ArraySize(symbols1) ; // 探索ループを終了 する。

}

}

}

return (textNew);

}

 

Good day !

csv形式のデータを自動的にe-mailで送信する方法について、アドバイス(または例のリンク)をお願いします。

ありがとうございます。