Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
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
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 CJAHola 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
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,
RobertGracias 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.
¿Te refieres a cómo guardar en un archivo CSV?
Comprueba esto:
Herramientas - Lector de .csvHola, 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]);
}
}
}