Вопрос: как сделать так ,чтобы эксперт мог открыть только одну позицию?
int NumberOfOrders(string sy="", int op=-1, int mn=-1) {
int i, k=OrdersTotal(), ko=0, ot;
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
ot=OrderType();
if (ot>1 && ot<6) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || ot==op)) {
if (mn<0 || OrderMagicNumber()==mn) ko++;
}
}
}
}
return(ko);
}
использую это примерно так:
if(NumberOfOrders(NULL)==0)
{
Print("Вошли в цикл");
Print("Покупаю");
NumderOrder=OrderSend(Symbol(),OP_BUY,lot,Ask,3,Ask-50*Point,Ask+50*Point,"1",0,0,Red);
Print(GetLastError());
}
В результате он все равно открывает несколько подряд не закрыв старую. Не могу понять в чем дело. Помогите плиз.
StartBalanceとStarLotsの比率を設定されたリスクに応じて最初に定義した場合、エクイティ値を決定する必要があります。
if(AccountEquity()<StartBalance) Top-up = (AccountBalance()+(StartBalance-AccountEquity()))*New Lot/StarLot
AccountCredit()を除いたものです。もちろん、私が正しく理解していればの話ですが。
そこには、すでに公式が示されています。
必要量(追加量)は、計算式で算出 できます。V(extra)= (SumInv / Equity) * ロット数
どこで
SumInv- 新たに追加された量 - そのサイズは、特定の瞬間のためにプログラム的に計算された何らかの形で知られている必要があります(事前に知られています)。
Equity- 同じ時点の口座の資本 - この値は取引口座の情報を取得する機能から取得されます。
ロット - 先に(開始時に)購入した資産の数量で、仮に1ロットとする。
つまり、ポジションを修正するためには、変数SumInvの 値を知る必要があるのです...。
この変数がゼロにならないことを前提に、プログラム計算を解決する最善の方法は何でしょうか?
そこには、すでに計算式が示されている。
必要量(追加量)は、計算式で算出 できます。V(extra) = (SumInv / Equity) * ロット数
どこで
SumInv- 新たに追加された量 - そのサイズは、特定の瞬間のためにプログラム的に計算された何らかの形で知られている必要があります(事前に知られています)。
Equity- 同じ時点の口座の資本 - この値は取引口座の情報を取得する機能から取得されます。
ロット - 先に(開始時に)購入した資産の数量で、仮に1ロットとする。
つまり、ポジションを修正するためには、変数SumInvの 値を知る必要があるのです...。
この変数がゼロでない限り、プログラムによる計算を解決する最善の方法は何でしょうか?
スタートロットを何枚増やすかわからないのに、何を基準に計算したらいいのかわからない。これは純粋に人間的な要因です。
SumInv= "残高を○○円増やしたい" + StartBalance-Equity
それとも、最適なスタートバランスがわからず、頼っているのでしょうか? ストップの大きさとレバレッジに基づいて計算する必要があります。
私のEAでは、すべての計算はストップのサイズに基づいており、したがって最適な開始残高(それは必ずしも初期残高と同じではありません)、そして開始ロットの自動計算が行われます。
スタートロットを何個増やすかわからないのに、何から始めればいいのかわからない。これは純粋に人間的な要因です。
SumInv= "残高をxquid増やしたい" + StartBalance-Equity
それとも、最適なスタートバランスを知らないのでしょうか ?ストップの大きさやレバレッジから計算する必要があります。
私のEAでは、すべての計算は、ストップのサイズに基づいているため、最適な開始バランス(それは必ずしも初期残高と等しくありません)、その後、開始ロットの自動計算を行く。
すべては既知である。初期ロットは、上記の計算式に従って、入金額に比例して増加します。もう一度、リンク 先の情報を読む - 入出金時のポジション量の調整。
あなたは、トピックにしている場合 - ちょうど質問に答えるようにしてください:どのようにソフトウェアを決定する(アルゴリズム、または任意の数式を使用して、あなたがアカウント情報 関数に直接できない場合) - 何時に取引口座に任意の追加があった(以前に知られている)日中(00時、と言う)でした。上記式において、前回(開始時)の上乗せに必要な追加量を算出するための他の変数は既知である。
みんな、教えてくれ...
すべて既知である。初期ロットは、上記の計算式に従って、入金額に比例して増加します。もう一度、リンク 情報を読んでください - あなたが資金を入金/出金するときに、ポジションのボリュームに調整。
あなたは、トピックにしている場合 - ちょうど質問に答えるようにしてください:どのようにソフトウェアを決定する(アルゴリズム、または任意の数式を使用して、あなたがアカウント情報 関数に直接できない場合) - 日中の任意の(以前に知られている)時間で取引口座への任意の追加があった(00時と言っている)。上記式において、前回(開始時)の上乗せに必要な追加量を算出するための他の変数は既知である。
みんな、ヒントを...。
これではっきりしました。例えば、前日に補充や引き出しがあったかどうかをプログラム的に計算する必要があるとします。インジケーターを添付します。計算時間帯の最初にあった残高と、計算日数を入力するだけです。今、私はあなたのことを正しく理解していることを望みます。
皆さん、こんにちは。
またインジケーターと一緒です。旧友のアドバイスで、線上の点の値を計算し、その値でインジケータの配列を埋めるループを構成してみました。
ひとつひとつ、ちゃんとできているようです。一緒に端末もハングアップしてしまう:=(
//for (i=Vnf2;i>0;i--)
// {int k=Vnf2;
//ArrayResize(Buf_DN,Vnf2+1)を行う。
// Buf_DN[i]= EquationDirect(Vnf2,VMF2,Vnf1,VMF1,k);
// k--;
// }
小さなミスですが、このバリアントではまだ掛かります
int k=Vnf2;
for (i=Vnf2;i>0;i--)
// {
//ArrayResize(Buf_DN,Vnf2+1)を行う。
// Buf_DN[i]= EquationDirect(Vnf2,VMF2,Vnf1,VMF1,k);
// k--;
// }
あなたは、市場のオープン ポジションの数ではなく、保留中の 注文の数を計算しようとしています。