¿Cómo codificar? - página 265

 

número de subventana desconocido

Hola compañeros codificadores

Alguien tiene una solución a este problema con las llamadas de iCustom, he probado todo lo que se me ocurre pero sigo teniendo el mismo mensaje en la pestaña de Expertos.

número de subventana desconocido -1 para la función ObjectCreate

Saludos CJA

 

Eliminar las llamadas de subventana en el Indicador

cja:
Hola compañeros codificadores

Alguien tiene una solución a este problema con las llamadas de iCustom, he probado todo lo que se me ocurre pero sigo teniendo el mismo mensaje en la pestaña de Expertos.

Número de subventana desconocido -1 para la función ObjectCreate

Saludos CJA

Hola CJA,

Tengo una solución que utilizo para solucionar este problema.

El indicador que tu EA está llamando en el iCustom está tratando de encontrar una subventana para dibujar sus objetos.

En la mayoría de los casos usted no necesita que su indicador dibuje nada, sólo proporcionar los valores del indicador a su EA.

Mi solución es hacer una copia del indicador y eliminar las llamadas a la subventana y las rutinas de dibujo de objetos.

Esto elimina los errores de la subventana y hace que el EA se ejecute más rápido también.

Luego utilice este nuevo nombre de indicador en sus declaraciones iCustom para su EA.

Estoy seguro de que probablemente hay una mejor solución de código, pero esto funciona para mí.

Espero que esto ayude,

Robert

 

Errores de la subventana iCustom

cosmiclifeform:
Hola CJA,

Tengo una solución que utilizo para solucionar este problema.

El indicador que su EA está llamando en el iCustom está tratando de encontrar una subventana para dibujar sus Objetos.

En la mayoría de los casos usted no necesita que su indicador dibuje nada, sólo proporcionar los valores del indicador a su EA.

Mi solución es hacer una copia del indicador y eliminar las llamadas a la subventana y las rutinas de dibujo de objetos.

Esto elimina los errores de la subventana y hace que el EA se ejecute más rápido también.

Luego utilice este nuevo nombre de indicador en sus declaraciones iCustom para su EA.

Estoy seguro de que probablemente hay una mejor solución de código, pero esto funciona para mí.

Espero que esto ayude,

Robert

Gracias Robert - su sugerencia funciona sin embargo sospecho que debe haber alguna otra manera de hacerlo aunque hice una búsqueda en la red y no encontró ninguna solución que funcionó o tuvo algún sentido sólo un montón de preguntas y sin respuestas. Así que gracias por tu ayuda una vez más.

Saludos CJA

 

CJA

Sólo una sugerencia : ¿por qué no utilizar (cuando se llama con iCustom()) un parámetro para pasar el número de ventana deseado? Algo así como : si (ParameterWindowID>=0) entonces es desde iCustom sino haz algún código por defecto.

De esta manera podrías forzarlo a dibujar objetos incluso cuando se llama desde otro código y dibujaría los objetos en un lugar correcto

 

Ayuda con la codificación

Hola chicos.

Por favor, ¿alguien puede decirme si es posible utilizar BOLD textFONTtype en el informe de alerta de correo electrónico? Si es así, ¿cómo puedo codificar esto?

Muchas gracias por la ayuda.

 
codersguru:
¿Te refieres a cómo guardar en un archivo CSV?

Comprueba esto:

Herramientas - Lector de .csv

Hola, Gurú,

¿Hay algún lugar en su sitio web donde pueda descargar esta dll? Creo que es una excelente herramienta y estoy bastante seguro de que puedes escribirla mejor que yo, así que no me molestaré en hacerlo. Gracias de antemano.

¿Necesito registrarme? Esto se encuentra en la sección de descargas, pero no pude averiguar cómo descargar nada.

 

modificación rápida de EA

Hola,

Necesito un poco de ayuda, traté de cambiar el código de abajo, pero el EA seguía estrellándose MT4.

Quiero que la orden se cierre cuando la barra actual (la barra donde se ejecutó la orden) se cierre. Básicamente el comercio de una barra.

Este es el código original, opera de señal a señal.

//+------------------------------------------------------------------+

//| Signal Begin(Exit Buy) |

//+------------------------------------------------------------------+

if (signaldown!=EMPTY_VALUE&&signaldown!=0) Order = SIGNAL_CLOSEBUY;

//+------------------------------------------------------------------+

//| Signal End(Exit Buy) |

//+------------------------------------------------------------------+

if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");

if (!EachTickMode) BarCount = Bars;

IsTrade = False;

continue;

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

if(Bid - OrderOpenPrice() > Point * TrailingStop) {

if(OrderStopLoss() < Bid - Point * TrailingStop) {

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

} else {

//Close

//+------------------------------------------------------------------+

//| Signal Begin(Exit Sell) |

//+------------------------------------------------------------------+

if (signalup!=EMPTY_VALUE&&signalup!=0) Order = SIGNAL_CLOSESELL;

//+------------------------------------------------------------------+

//| Signal End(Exit Sell) |

//+------------------------------------------------------------------+

if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");

if (!EachTickMode) BarCount = Bars;

IsTrade = False;

continue;

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {

if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {

OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

}

}

}

//+------------------------------------------------------------------+

//| Signal Begin(Entry) |

//+------------------------------------------------------------------+

//if (timeprev!=Time[0]){

// timeprev = Time[0];

if (signalup!=EMPTY_VALUE&&signalup!=0)

{

Order = SIGNAL_BUY;

}

if (signaldown!=EMPTY_VALUE&&signaldown!=0){

Order = SIGNAL_SELL;

}

// }

//+------------------------------------------------------------------+

//| Signal End |

//+------------------------------------------------------------------+

//Buy

if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

if(!IsTrade) {

//Check free margin

if (AccountFreeMargin() < (100 * Lots)) {

Print("We have no money. Free Margin = ", AccountFreeMargin());

return(0);

}

if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;

if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);

if(Ticket > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("BUY order opened : ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");

} else {

Print("Error opening BUY order : ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}

//Sell

if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

if(!IsTrade) {

//Check free margin

if (AccountFreeMargin() < (100 * Lots)) {

Print("We have no money. Free Margin = ", AccountFreeMargin());

return(0);

}

if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;

if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);

if(Ticket > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("SELL order opened : ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");

} else {

Print("Error opening SELL order : ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}

if (!EachTickMode) BarCount = Bars;

return(0);

}

//+------------------------------------------------------------------+

¿Alguien puede ayudarme?

 

También he encontrado este código,

if(data!=iTime(Symbol(),0,0))

{

if(signalup!=EMPTY_VALUE&&signalup!=0)

{

if(openpos()>0)

{

for(i=0;i<OrdersTotal();i++)

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

{

if(OrderType()==OP_SELL&&OrderSymbol()==Symbol()&&OrderMagicNumber()==mn)

{

if(OrderClose(OrderTicket(),lots,Ask,slip))

Print("short was closed");

}

}

}

Print("try open long");

Print(Symbol());

nt=OrderSend(Symbol(),OP_BUY,lots,Ask,slip,0,0,"ab",mn,0,Green);

if(nt>0)

Print("long order was opened");

}

if(signaldown!=EMPTY_VALUE&&signaldown!=0)

{

if(openpos()>0)

{

for(i=0;i<OrdersTotal();i++)

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

{

if(OrderType()==OP_BUY&&OrderSymbol()==Symbol()&&OrderMagicNumber()==mn)

{

if(OrderClose(OrderTicket(),lots,Bid,slip))

Print("long was closed");

}

}

}

Print("try open short");

Print(Symbol());

nt=OrderSend(Symbol(),OP_SELL,lots,Bid,slip,0,0,"ab",mn,0,Red);

if(nt>0)

Print("short was opened");

}

data=iTime(Symbol(),0,0);

}

//----

//----

return(0);

}

//+------------------------------------------------------------------+

int openpos()

{

int j=0;

int i,n;

n=OrdersTotal();

for(i=0;i<n;i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)

if(OrderSymbol()==Symbol()&&OrderMagicNumber()==mn&&(OrderType()==OP_SELL||OrderType()==OP_BUY))

j++;

}

return(j);

¿Puede algún experto decirme cuál está mejor escrito?

 

El punto de equilibrio para todos los pedidos de un par (mágico)

Hola a todos,

quiero recoger todas las órdenes (compra y venta) de un par por magic y si llegan a un breakeven, que se cierren todas las órdenes.

cualquier orientación será bienvenida, gracias

extern bool PairBreakeven=true;// Breakeven por par todas las órdenes de un mismo par/magia

extern double Pairbreakevengain=6;// ganancia en pips necesaria para permitir el break even

extern double Pairbreakeven=3;// punto de equilibrio, orden cerrada, 3 pips de ganancia/descuento

double Pairmovebreakeven;

if(PairBreakeven==true){

if(Pairbreakevengain>0)Pairmovebreakeven(Pairbreakevengain,Pairbreakeven);

CerrarPedidosDeCompra(Magia);

CerrarOrdenesDeVenta(Magia);

}

void Pairmovebreakeven(double Pairbreakevengain,double Pairbreakeven){

ActualizarTarifas();

if(OrdersTotal()>0){

for(int i=Total de Pedidos();i>=0;i++){

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic ){

devolver;

}

}

}

}

int CerrarPedidos(int Magia){ //op_sell es similar

int total=Total de Pedidos();

for(int cnt=total-1;cnt>=0;cnt--){

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if(OrderMagicNumber()==Magic && OrderSymbol()==Symbol()){

if(OrderType()==OP_BUY){

OrderClose(OrderTicket(),OrderLots(),Bid,3*mt);

}

}

}

return(0);

}

 

ArraySort con 3 o más dimensiones.

¿Puede algún experto ayudar en esto?

He tratado de usar arraysort con éxito para la matriz de 1 o 2 dimensiones. Pero me quedé atascado con la dimensión 3. Por lo que sé arraysort utiliza sólo la primera columna para la clasificación. ¿Puede alguien aconsejarme sobre cómo resolver este arraysort con 3 o más dimensiones?

bool Restart = true;

double arraystore[20][20][20];

double ArrayActual[20] = {1.23,3.65,0.02,5.44,0.92,0.11,1.21,999.0,555.5,0.0001,44.221,1.01,0.002};

void init()

{

if (Restart == true)

{

Go();

Restart = false;

}

}

void start()

{

}

void Go()

{

for (int a = 1; a<=3; a++)

{

for (int b = 1; b<=6; b++)

{

int c = b+ (a-1)*6;

arraystore[a][0] = ArrayActual[c];

arraystore[a][1] = a;

arraystore[a][2] = b +a;

Print ( arraystore[a][0] + " . " + arraystore[a][1] + " . " + arraystore[a][2]);

}

}

ArraySort(arraystore,WHOLE_ARRAY,1,MODE_DESCEND);

for ( a = 1; a<=3; a++)

{

for ( b = 1; b<=6; b++)

{

Print ( arraystore[a][0] + " . " + arraystore[a][1] + " . " + arraystore[a][2]);

}

}

}
Razón de la queja: