//+------------------------------------------------------------------+//| подготовить массив тикетов для закрытия |//+------------------------------------------------------------------+void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9])
{
int size=ArrayRange(arrayTickets,0);
//----if (size==0) return;
int i,type,ticket,closeSize;
for (i=0;i<size;i++)
{
type=arrayTickets[i][1];
// если тип ордера не рыночный, то пропускаемif (type>OP_SELL) continue;
if (Revers) // перевернем тип рыночного ордера
{
if (type==OP_BUY) type=OP_SELL; else type=OP_BUY;
}
// тут решаем для каждого открытого ордера его судьбу// оставить в рынке или добавить в массив на закрытиеif (type==OP_BUY)
{
//// код разрешающий оставить покупку// как примерif (signal==OP_BUY) continue;
}
if (type==OP_SELL)
{
//// код разрешающий оставить продажу// как примерif (signal==OP_SELL) continue;
}
closeSize=ArrayRange(ticketsClose,0);
ArrayResize(ticketsClose,closeSize+1);
ArrayResize(lots,closeSize+1);
ticketsClose[closeSize][0] = arrayTickets[i][0]; // # тикета
ticketsClose[closeSize][1] = arrayTickets[i][1]; // тип ордера// здесь укажем сколько лотов нужно закрыть
lots[closeSize] = arrayTickets[i][2]; // закрываемый объем// можно закрывать частично, тогда нужно переписать строку сверху
}
//----return;
}
//+------------------------------------------------------------------+//| Закрывает ордера с указанными тикетами |//+------------------------------------------------------------------+void CloseMarketOrders(int ticketsArray[][2], double lotsArray[])
{
//----int i,size=ArrayRange(ticketsArray,0);
if (size==0) return;
int ticket,type;
double lots;
bool res;
int total=OrdersTotal();
for (i=0;i<size;i++)
{
ticket = ticketsArray[i][0];
type = ticketsArray[i][1];
lots = lotsArray[i];
RefreshRates(); // на всякий случай обновим сведения о рыночном окружении// блок закрытия покупокif (type==OP_BUY)
{
res = OrderClose(ticket,lots,Bid,Slippage,Orange);
if (!res)
{
Print("Не удалось закрыть ордер в покупку #",ticket,"! Ошибка №",GetLastError());
// дальнейшая обработка ошибки, написать самостоятельно
}
}
// блок закрытия продажif (type==OP_SELL)
{
res = OrderClose(ticket,lots,Ask,Slippage,Orange);
if (!res)
{
Print("Не удалось закрыть ордер в продажу #",ticket,"! Ошибка №",GetLastError());
// дальнейшая обработка ошибки, написать самостоятельно
}
}
}
//----return;
}
プロフェッショナルの皆様、知識豊富な皆様
BBインジケーターが訳の分からないシグナルを出している(「赤-緑-赤」ではない!)ので困っています。正確には、そのような呼びかけを設定したのです。
bolup = iBands(Symbol(), 0, 24, 0, 2, 0, 1, 1);
boln = iBands(Symbol(), 0, 24, 0, 2, 0, 2, 1);
bolmd = (bolup + boldn) / 2;
Print("Bands upper = ", bolup;")
Print("Bands lower = ", boldn);
Print("Bands media = ", bolmd);
その結果、3つの変数がすべて同じ値を与えることになります。>8-O
ペアEUR、TF - H1。何かアイデアはありますか?
よろしくお願いします...
わかりやすいように、 、絵を描いてみました。
プロフェッショナルの皆様、知識豊富な皆様
BBインジケーターが訳の分からないシグナルを出している(「赤-緑-赤」ではない!)ので困っています。正確には、次のような呼びかけをしています。
bolup = iBands(Symbol(), 0, 24,0, 2, 0, 1, 1);
boldn = iBands(Symbol(), 0, 24,0, 2, 0, 2, 1);
bolmd = (bolup + boldn) / 2;
Print("Bands upper = ", bolup);
Print("Bands lower = ", boldn);
Print("Bands media = ", bolmd");
その結果、3つの変数がすべて同じ値を与える。>8-O
それはEUR、H1です。何かアイデアはありますか?
よろしくお願いします...
問題があって、どうすれば解決できるのか見当もつかないので、説明します。
つまり、私が投稿したコードでは、2つの関数があります。
void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9]) に、注文を残すか閉じるかを決定する条件を入れる必要があります...。
条件をつけてみたが、何も効果がない...。
どなたか、これらの関数にエラーがあるのか、あるいは私が失敗したのか、ご確認ください。
テスターでは必要ありませんが、デモまたはリアル口座では、ビジー状態の取引スレッドに関するメッセージが表示されます。
こんにちは。システムは、買い、売りの3つのエントリーポイントを提供します。しかし、シグナルが入ると、シグナルがある限り、1ティック ごとにポジションが建ちます。フラグでどこかにエラーがある。よろしくお願いします。
こんにちは。システムは、買い、売りの3つのエントリーポイントを提供します。しかし、シグナルが入ると、シグナルがある限り、1ティックごとにポジションが建ちます。フラグでどこかにエラーがある。よろしくお願いします。
OrdersTotal() は、すでにオープンしているポジションの数を表示します。