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

 
denis77515:

プログラミングの初心者を拒まないで、コードが正しく書かれているかどうか、見てください。対処するのが億劫でない人。多通貨なのでStrategy Testerでテストできない。アーカイブに添付されたコードとインジケータを含むファイル


シンボルと注文数(オープンポジション)のリンクされた配列を作成する関数を作成しました。デモでいくつかのポジションを開いてスクリプトをテストしてください
string Smbl[];
int CntBuy[],CntSell[];
void OnStart()
 {
    if(CountBuySell(Smbl, CntSell, CntBuy))
       for(int i=0; i<ArraySize(Smbl); i++) PrintFormat(" Symbol %s CntBuy %d CntSell %d", Smbl[i], CntBuy[i], CntSell[i]);
 }
//-------------------
bool CountBuySell(string &symb[], int &cnt_sell[], int &cnt_buy[])
{
   int ot,n,N=0,f=0,cb=0,cs=0;
   string symbol;
   for(int i=OrdersTotal()-1; i>=0; i--)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
         
         ot=OrderType()+1; if(ot>2)  continue;                       // пропускаем лимит ордера
         symbol=""; symbol=OrderSymbol(); if (symbol=="") continue;  // убедились что символ выбран
         f=0; cb=0; cs=0;                                            // обнулили счетчики и флаг символа
         for (n=0; n<N; n++) if (symbol==symb[n]) f=1;               // если в массиве символ OrderSymbol() уже есть, то не будем увеличивать размерность массивов, просто допишем в нижнем цикле еще 1 позицию
         if (f==0)                                                   // такого символа symbol=OrderSymbol() еще не было, увеличим размерность массивов под новый символ и запишем этот символ
         {
            N++; 
            ArrayResize(symb,N); ArrayResize(cnt_buy,N); ArrayResize(cnt_sell,N);
            symb[N-1]=symbol; cnt_buy[N-1]=0.0; cnt_sell[N-1]=0;
         }
         
         if(ot==1) cb++;  // OP_BUY   для выбранного символа
         else      cs++;  // OP_SELL
         
        // перебираем массив и сравним его с выбранным символом. В найденный индекс запишем для данного символа кол-во откр позиций
        // такоим образом для каждого индекса всех 3 массивов будет соответствовать  конкретный символ и количество позиций покупки и продажи для него
         for (n=0; n<N; n++) if (symbol==symb[n]) { cnt_buy[n]+=cb; cnt_sell[n]+=cs;  }
         
      }
   }
   if(N>0) return(1);   // есть открытые позиции
   return(0);           // позиций нет
}
 
evillive:

入金通貨で指定した損益値になったら口座の全ポジションを決済する簡単なEAを書こうとしているのですが(数シンボル単位で開いています)、ポジションが表示されるとすぐに決済してしまいます(((

何が悪いのか理解できない。



こちらをご覧ください。


extern int profit = 30;

extern int Magic=0;

int CurProfit。

extern bool CurSymbolOnly = false;


int start() // 特殊関数スタート

{

//全注文の利益カウンター

double p1;

int i1, kk1=OrdersTotal(), pr1=0;

for (i1=0; i1<kk1; i1++)

{

if(OrderSelect(i1, SELECT_BY_POS, MODE_TRADES))

{

if (!CurSymbolOnly || OrderSymbol()==Symbol())

{

p1=MarketInfo(OrderSymbol(), MODE_POINT)とする。

if (p1==0) if (StringFind(OrderSymbol(), Symbol())<0) p1=0.0001; else p1=0.01;

if (OrderType()==OP_BUY)

{

pr1+=NormalizeDouble((OrderClosePrice()-OrderOpenPrice())/p1, 0);

}

if (OrderType()==OP_SELL)

{

pr1+=NormalizeDouble((OrderOpenPrice()-OrderClosePrice())/p1, 0);

}

}

}

}

CurProfit=pr1;



if (利益<=pr1)

{

ClosePosWithMaxProfitInCurrency()を使用します。

}

return(0)です。

}


///高いものから順に閉じる

void ClosePosWithMaxProfitInCurrency(string sy=""、int op=-1、int mn=-1)です。

{

double pr=0;

int i5, k=OrdersTotal(), np=-1;

if (sy=="0") sy=Symbol();

for (i5=k-1; i5>=0; i5--)

{

if (OrderSelect(i5, SELECT_BY_POS, MODE_TRADES))

{

if ((OrderSymbol()==sy || sy=="))&& (op<0 || OrderType()==op))

{

if (mn<0 || OrderMagicNumber()==mn))

{

if (pr<OrderProfit()+OrderSwap())

{

pr=OrderProfit()+OrderSwap()です。

np=i5です。

}

}

}

}

}

if (np>=0)

{

if (OrderSelect(np, SELECT_BY_POS, MODE_TRADES))

{

{for (int i=OrdersTotal()-1; i>=0; i--)

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;

if (OrderType()==OP_BUY ) OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),9);

if (OrderType()==OP_SELL) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),9);

}

}

}

}

closeotlojnie();

}


//closeotlojnie

void closeotlojnie()

{

for (int i=OrdersTotal()-1; i>=0; i--)

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;

if (OrderType()==OP_BUYSTOP ) OrderDelete(OrderTicket());

if (OrderType()==OP_SELLSTOP ) OrderDelete(OrderTicket());

if (OrderType()==OP_BUYLIMIT ) OrderDelete(OrderTicket());

if (OrderType()==OP_SELLLIMIT) OrderDelete(OrderTicket());

}

}

 
GSB:
私は、シンボルと注文(オープンポジション)の数のリンクされた配列を作成するためにあなたのための単一の関数を作成し、デモでいくつかのポジションを開くことによって、スクリプトをテストしています


お忙しいところありがとうございます、でも私にはちょっと複雑なんです、お邪魔しました。何を、どこで、どのように説明するのか?指に書いてある通りです。


このようなスクリプトでの取引に慣れたことはありません。

 
GSB、pakoさん、 ありがとうございます。このところ、こういうことに気づかず、ぼんやりしていました...。
 
denis77515:

お忙しいところありがとうございます、でも私にはちょっと複雑なんです、お邪魔しました。何を、どこで、どのように説明するのか?指に書いてある通りです。


試しに、デモ口座で手動で取引してみました。


エラーしか出ないのに、どうやってデモ口座でテストしたんだ?提示されたコードは、取引できないものでした。コードにコメントを付けました。知識も苦労もなく、すべて自分でやらなければならない...。特にFXはマーケットプレイスで取引することはできません。その結果、曖昧さのないものになる。上記の問題点に加え、選択した取引 システムを使用する必要があります。2-3ヶ月後に結果が出ますので、その時にこのシステムが個人的に、また原則的に取引に適しているかどうかを判断してください。
 
ありがとうございます!頑張ります
 
モデレーターまたはアドミニストレーターへの質問:ニックネームを変更することはできますか?MQL5に登録しようとしたのですが、私のニックネームがすでに使われていることが判明し、別のニックネームで登録することになりました。あちらとこちらで同じニックネームを持ちたい。もちろん、ここでも再登録は可能ですが、Code Baseに何か投稿するようになったので、「名前を変える」だけで作品(投稿)のオーサーシップを維持したいのです。可能なのでしょうか?
 
Spy:
モデレーターまたはアドミニストレーターへの質問:ニックネームを変更することはできますか?MQL5に登録しようとしたら、私のニックネームはすでにそこで使われていることが判明し、別のニックネームで登録することになりました。あちらとこちらで同じニックネームを持ちたい。もちろん、ここでも再登録は可能ですが、Code Baseに何か投稿するようになったので、「名前を変える」だけで作品(投稿)のオーサーシップを維持したいのです。可能なのでしょうか?

Roshaにプライベートメッセージで書き込む。ぜひ、見つけてあげてください。問題を述べる
 

OK、ありがとうございます。

 

こんにちは!以前のバージョンのMetaTraderでEAを使用していたため、ターミナルをアップグレードしました。その後、509に戻りました。つまり、EAが「60...Bildでは、書き込んだ端末のバージョンに戻りました。

問題は、「戻ってきた」後にStrategy Testerで案件を開かなくなったEAや、チェックできなくなったEA(Strategy Testerのスタートボタンが単にクリックに反応しない)をどうするかということです。