[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. No puedo ir a ningún sitio sin ti - 4. - página 388
Buenas tardes. Tengo una pregunta para usted.... Entrada por estocástico (5,14,3) salida también por estocástico pero con otro periodo (5,3,3). No sé cómo puedo utilizar estocástico para la salida, pero no la señal de retorno. Tengo un problema y no tengo ni idea de cómo se puede solucionar, voy a intentar explicarlo. Así, en el código que he publicado, hay 2 funciones
//+------------------------------------------------------------------+//| подготовить массив тикетов для закрытия |//+------------------------------------------------------------------+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;
}
En el void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9]) tenemos que poner una condición que decida si debemos dejar o cerrar la orden. He intentado poner condiciones pero nada funciona.... ¿Puede alguien mirar y mostrar si hay un error en estas funciones o me confundí....
belous: Buenas tardes. Tengo una pregunta para usted.... Entrada por estocástico (5,14,3) salida también por estocástico pero con otro periodo (5,3,3). No entiendo cómo puedo utilizar estocástico para la salida, pero no la señal de retorno. Tengo un problema y no tengo ni idea de cómo se puede solucionar, voy a intentar explicarlo. En el código, que he expuesto, hay 2 funciones En el void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9]) tenemos que poner una condición que decida si debemos dejar o cerrar la orden... He intentado poner condiciones pero nada funciona.... Que alguien mire y muestre si hay algún error en estas funciones o la he fastidiado....
Tal vez sea útil. No he mirado su código. Las funciones de Kim.
//========================================================================================================================// Закрытие открытых позиций на продажу //-------------------------------------------------------------------------------------------------------------------------if(ExistPositions(NULL, OP_SELL, Magic, 0) == true) //если открыта позиция sell
{
if() // условие на закритие
{
ClosePosFirstProfit(NULL, OP_SELL, Magic); //закрываем позицию
}
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 06.03.2008 |//| Описание : Возвращает флаг существования позиций |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//| ot - время открытия ( 0 - любое время открытия) |//+----------------------------------------------------------------------------+bool ExistPositions(string sy="", int op=-1, int mn=-1, datetime ot=0) {
int i, k=OrdersTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (ot<=OrderOpenTime()) return(True);
}
}
}
}
}
}
return(False);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание: Закрытие одной предварительно выбранной позиции |//+----------------------------------------------------------------------------+void ClosePosBySelect() {
bool fc;
color clClose;
double ll, pa, pb, pp;
int dg=MarketInfo(OrderSymbol(), MODE_DIGITS), err, it;
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
for (it=1; it<=NumberOfTry; it++) {
if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) //break;while (!IsTradeAllowed()) Sleep(5000);
RefreshRates();
pa=MarketInfo(OrderSymbol(), MODE_ASK);
pb=MarketInfo(OrderSymbol(), MODE_BID);
if (OrderType()==OP_BUY) {
pp=pb; clClose=clCloseBuy;
} else {
pp=pa; clClose=clCloseSell;
}
ll=OrderLots();
pp=NormalizeDouble(pp, dg);
fc=OrderClose(OrderTicket(), ll, pp, Slippage, clClose);
if (fc) {
if (UseSound) PlaySound(SoundSuccess); //break;
} else {
err=GetLastError();
if (UseSound) PlaySound(SoundError);
if (err==146) while (IsTradeContextBusy()) Sleep(1000*11);
Print("Error(",err,") Close ",GetNameOP(OrderType())," ",
ErrorDescription(err),", try ",it);
Print(OrderTicket()," Ask=",pa," Bid=",pb," pp=",pp);
Print("sy=",OrderSymbol()," ll=",ll," sl=",OrderStopLoss(),
" tp=",OrderTakeProfit()," mn=",OrderMagicNumber());
Sleep(1000*5);
}
}
} elsePrint("Некорректная торговая операция. Close ",GetNameOP(OrderType()));
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание : Закрытие позиций по рыночной цене сначала прибыльных |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+void ClosePosFirstProfit(string sy="", int op=-1, int mn=-1) {
int i, k=OrdersTotal();
if (sy=="0") sy=Symbol();
// Сначала закрываем прибыльные позицииfor (i=k-1; i>=0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (mn<0 || OrderMagicNumber()==mn) {
if (OrderProfit()+OrderCommission()+OrderSwap()>0) ClosePosBySelect();
}
}
}
}
}
// Потом все остальные
k=OrdersTotal();
for (i=k-1; i>=0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (mn<0 || OrderMagicNumber()==mn) ClosePosBySelect();
}
}
}
}
}
belous: Buenas tardes. Tengo una pregunta para usted.... Estoy entrando por estocástico (5,14,3) y saliendo por estocástico sólo con otro periodo (5,3,3). No entiendo cómo puedo utilizar estocástico para la salida, pero no la señal de retorno?
Yo no crearía un array de tickets para cerrar, sino que en el bucle de enumeración de órdenes de mercado comprobaría cada orden alimentando su ticket a la entrada de la función de cierre con una comprobación de posibles condiciones.
La redacción es muy buena. Lo que pregunta el interlocutor...
hay scripts que abren simultáneamente la venta de un símbolo en la segunda compra.
Estoy interesado en un script que pueda abrir simultáneamente una venta/compra en 7-10 símbolos, con un volumen especificado para cada símbolo, a precios actuales.
Ejemplo:
vender EURUSD 1
comprar GBPUSD 1.5
vender USDCAD 1.2
comprar AUDUSD 1.1
comprar NZDUSD 2
comprar USDCHF 3
El script MultiOrders es casi perfecto, sólo que hay 5 campos para los símbolos.
Hay scripts que abren simultáneamente la venta de un símbolo en la segunda compra.
Estoy interesado en un script que pueda abrir simultáneamente una venta/compra en 7-10 símbolos, con un volumen especificado para cada símbolo, a precios actuales.
Ejemplo:
vender EURUSD 1
comprar GBPUSD 1.5
vender USDCAD 1.2
comprar AUDUSD 1.1
comprar NZDUSD 2
comprar USDCHF 3
El script MultiOrders es casi perfecto, sólo que hay 5 campos para los símbolos.
Igualmente. Con este script, usted, en su script, saldrá aún mejor, e incluso puede añadir una funcionalidad extra.
¿Puedes decirme si es posible poner los EAs en carpetas en lugar de almacenarlos todos en una carpeta...\Nexpertos?
Y que también trabajen desde estas carpetas.
Tengo 20 versiones de un EA y 20 de otro, y es imposible desbloquear el conjunto de archivos.
Buenas tardes.
La búsqueda no ha servido de nada.
Tal vez alguien haya visto un guión similar.
El punto: el script especifica: símbolo, compra/venta, volumen
debería haber entre 5 y 7 campos de este tipo.
para la apertura simultánea en varios símbolos, cuyo volumen no es igual a 0.
Gracias.
Sinceramente.
Tengo un problema y no tengo ni idea de cómo se puede solucionar, voy a intentar explicarlo.
Así, en el código que he publicado, hay 2 funciones
En el void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9]) tenemos que poner una condición que decida si debemos dejar o cerrar la orden.
He intentado poner condiciones pero nada funciona....
¿Puede alguien mirar y mostrar si hay un error en estas funciones o me confundí....
Buenas tardes.
La búsqueda no ha servido de nada.
Tal vez alguien haya visto un guión similar.
El punto: el script especifica: símbolo, compra/venta, volumen
debería haber entre 5 y 7 campos de este tipo.
para la apertura simultánea en varios símbolos, cuyo volumen no es igual a 0.
Gracias.
Sinceramente.
Esa es una redacción muy buena. Lo que pregunta el interlocutor...
Buenas tardes. Tengo una pregunta para usted.... Entrada por estocástico (5,14,3) salida también por estocástico pero con otro periodo (5,3,3). No entiendo cómo puedo utilizar estocástico para la salida, pero no la señal de retorno.
Tengo un problema y no tengo ni idea de cómo se puede solucionar, voy a intentar explicarlo.
En el código, que he expuesto, hay 2 funciones
En el void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9]) tenemos que poner una condición que decida si debemos dejar o cerrar la orden...
He intentado poner condiciones pero nada funciona....
Que alguien mire y muestre si hay algún error en estas funciones o la he fastidiado....
Tal vez sea útil. No he mirado su código.
Las funciones de Kim.
Buenas tardes. Tengo una pregunta para usted.... Estoy entrando por estocástico (5,14,3) y saliendo por estocástico sólo con otro periodo (5,3,3). No entiendo cómo puedo utilizar estocástico para la salida, pero no la señal de retorno?
Yo no crearía un array de tickets para cerrar, sino que en el bucle de enumeración de órdenes de mercado comprobaría cada orden alimentando su ticket a la entrada de la función de cierre con una comprobación de posibles condiciones.
¿La oferta puede ser 0 en algún momento?
La redacción es muy buena. Lo que pregunta el interlocutor...
hay scripts que abren simultáneamente la venta de un símbolo en la segunda compra.
Estoy interesado en un script que pueda abrir simultáneamente una venta/compra en 7-10 símbolos, con un volumen especificado para cada símbolo, a precios actuales.
Ejemplo:
vender EURUSD 1
comprar GBPUSD 1.5
vender USDCAD 1.2
comprar AUDUSD 1.1
comprar NZDUSD 2
comprar USDCHF 3
El script MultiOrders es casi perfecto, sólo que hay 5 campos para los símbolos.
Hay scripts que abren simultáneamente la venta de un símbolo en la segunda compra.
Estoy interesado en un script que pueda abrir simultáneamente una venta/compra en 7-10 símbolos, con un volumen especificado para cada símbolo, a precios actuales.
Ejemplo:
vender EURUSD 1
comprar GBPUSD 1.5
vender USDCAD 1.2
comprar AUDUSD 1.1
comprar NZDUSD 2
comprar USDCHF 3
El script MultiOrders es casi perfecto, sólo que hay 5 campos para los símbolos.