¿qué hago ahora? Tengo una estrategia basada en canales, ¿hay alguna alternativa de sustitución?
Por supuesto que sí. Calcule los valores, guárdelos en una matriz o estructura y utilícelos para su EA. Y también puedes dibujar los objetos desde ahí - los valores están disponibles.
Quiero implementar lo siguiente la posibilidad de añadir diferentes plazos a UNA hoja (en diferentes ventanas pero en una sola hoja) Por favor, aconséjeme dónde ir y dónde cavar). ¿es posible a través de mql o WInApi? tal vez hay ejemplos del artículo que no pude encontrar(
Por favor, ayúdame a arreglar esto! da error 'Void' - declaración sin tipo 36 4 y ¿dónde debo reordenar o escribir return? //-------------------------------------------------------------------- Void OnTick() {
void se escribe con minúscula en lugar de con mayúscula. Mira, es un color diferente. Poner el cursor sobre esta palabra y pulsar F1 - a menudo ayuda.
Aparecen tantos mensajes de error después de arreglarlo... He arreglado los mensajes de error, pero comprueba tú mismo la lógica
#property strictbool Результат;
externint SL = 200, //Стоплосс в пунктах
TStop = 20, //
TStep = 10, //
TP = 85; //Тейкпрофит в пунктах//extern double Lot = 0.10; //используется только при risk = 0externdouble Lots = 0; // лот, если 0, то динамическийexterndouble RiskPercentage = 50; // % от депо на лот, если динамическийexternint MaxOrders = 6; //Максимальное кол-во ордеров одного направления//--------------------------------------------------------------------int STOPLEVEL,Magic=123321,tip;
datetime TimeBar;
string txt;
//--------------------------------------------------------------------int init()
{
if(Digits==3||Digits==5)
{
TStop *=10;
TStep *=10;
SL *=10;
}
return(INIT_SUCCEEDED);
}
//--------------------------------------------------------------------voidOnTick()
{
double Lot = Lots;
int Ticket = 0;
if (Lots==0)
{
double margin = MarketInfo(Symbol(), MODE_MARGINREQUIRED);
double minLot = MarketInfo(Symbol(), MODE_MINLOT);
double maxLot = MarketInfo(Symbol(), MODE_MAXLOT);
double step = MarketInfo(Symbol(), MODE_LOTSTEP);
double account = AccountFreeMargin();
double percentage = account*RiskPercentage/100;
Lot = MathRound(percentage/margin/step)*step;
if(Lot < minLot) Lot = minLot;
if(Lot > maxLot)Lot = maxLot;
}
int buy=0,sell=0;
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS))
{
if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
tip=OrderType();
if (tip==0) buy++;
if (tip==1) sell++;
}
}
Comment(txt,"\nБаланс ",DoubleToStr(AccountBalance(),2),"\nЭквити ",DoubleToStr(AccountEquity(),2),"\nBuy ",buy,"\nSel ",sell);
double TrPr=0,StLo=0;
double L = NormalizeDouble(Low[0], Digits);
double L1 = NormalizeDouble(Low[1], Digits);
double L2 = NormalizeDouble(Low[2], Digits);
double L3 = NormalizeDouble(Low[3], Digits);
double H = NormalizeDouble(High[0],Digits);
double H1 = NormalizeDouble(High[1],Digits);
double H2 = NormalizeDouble(High[2],Digits);
double H3 = NormalizeDouble(High[3],Digits);
double O = NormalizeDouble(Open[0], Digits);
double O1 = NormalizeDouble(Open[1], Digits);
double O2 = NormalizeDouble(Open[2], Digits);
double O3 = NormalizeDouble(Open[3], Digits);
double C = NormalizeDouble(Close[0],Digits);
double C1 = NormalizeDouble(Close[1],Digits);
double C2 = NormalizeDouble(Close[2],Digits);
double C3 = NormalizeDouble(Close[3],Digits);
//LONGif (buy<MaxOrders && TimeBar!=Time[0]&& H>H1&&H1>H2&&H2>H3)
{
if (TP!=0) TrPr = NormalizeDouble(Ask + TP * Point,Digits);
if (SL!=0) StLo = NormalizeDouble(Bid - SL * Point,Digits);
Ticket=OrderSend(Symbol(),OP_BUY, Lots,NormalizeDouble(Ask,Digits),3,0,0,"BreakdownLevelCandleMA",Magic,0,Blue);
if (Ticket==0)
Print("Error BUY",GetLastError(),"",Symbol()," Lot ",Lot," SL ",StLo," TP ",TrPr);
else
{
Результат=OrderModify(Ticket,OrderOpenPrice(),StLo,TrPr,0,Blue);
TimeBar=Time[0];
}
}
//SHORTif (sell<MaxOrders && TimeBar!=Time[0]&& L>L1&&L1>L2&&L2>L3)
{
if (TP!=0) TrPr = NormalizeDouble(Bid - TP * Point,Digits);
if (SL!=0) StLo = NormalizeDouble(Ask + SL * Point,Digits);
Ticket=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),3,0,0,"BreakdownLevelCandleMA",Magic,0,Red);
if (Ticket==0)
Print("Error SELL",GetLastError(),"",Symbol()," Lot ",Lot," SL ",StLo," TP ",TrPr);
else
{
Результат=OrderModify(Ticket,OrderOpenPrice(),StLo,TrPr,0,Red);
TimeBar=Time[0];
}
}
Trailing();
}
//!!! куда передвинуть? return(0);void Trailing()
{
for(int i=OrdersTotal() -1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic)
{
if(OrderType()==OP_BUY)
{
if (Bid-OrderOpenPrice()> TStop*Point || OrderStopLoss() ==0)
{
if(OrderStopLoss()<Bid-(TStep+TStop)*Point || OrderStopLoss() ==0)
{
if(!OrderModify(OrderTicket(), OrderOpenPrice(),NormalizeDouble(Bid-TStop*Point, Digits),0,0))
Print("Ошибка модификации ордера на покупку");
}
}
}
if(OrderType()==OP_SELL)
{
if (OrderOpenPrice()-Ask>TStop*Point || OrderStopLoss() ==0)
{
if((OrderStopLoss()> (Ask+(TStep+TStop)*Point)) || (OrderStopLoss()==0) )
{
if(!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+TStop*Point,Digits),0,0))
{
Print("Ошибка модификации ордера на продажу");
}
}
}
}
}
}
}
}
¡Hola, señores comerciantes! Escribí un robot de señales basado en el código que publiqué arriba. El robot genera señales para las opciones casi con precisión, pero con un retraso de dos barras. ¿Qué debería cambiar en el código para producir los mismos resultados pero dos barras antes? ¿O es imposible? Gracias.
La variable int contiene exactamente el número de segundos desde 1970, mientras que la variable datetime contiene la fecha.
Si necesita una barra determinada en el historial, no importa cómo la especifique: por fecha o por número de segundos, en cualquier caso, la variable indicará la hora de apertura de esta barra en particular, independientemente de la llegada de nuevos ticks y de la apertura de nuevas barras.
Muchas gracias, pero hay un problema más. Tengo un indicador que tiene la función stat, esta función debería usarse SOLO cuando llega una nueva señal, pero este problema está contando en cada barra, he hecho todo y he normalizado el doble en comparación, así que supongo que estoy jodido. Se ha acabado la tarde, ¿alguien puede explicar qué pasa? ???? ¡¡¡¡¡El indicador en el atache en la línea 193 es una llamada a una función con una condición, pero la condición no se cumple y el Furction stat se calcula a la llegada de cada barra, ya estoy aburrido de encontrar el error, chicos ayuden por favor !!!!! Gracias de antemano....
Recién ahora descubrí que la función stat se recalcula si el indicador es llamado desde otro indicador, cuando ambos están en el gráfico. Es decir, una vez se calcula para sí mismo y la segunda vez para el indicador que lo llama. ¿Qué es?
En la imagen se muestra lo siguiente. El comentario en la parte superior es el valor del buffer en el indicador principal en el que tiene lugar el cálculo, y la impresión (abajo) es el mismo buffer, pero sólo llamado en otro indicador y emitido en la impresión. ¡¡¡¡¡La diferencia es significativa, PERO PORQUE!!!!!
elprimer archivo es el principal, el segundo llama al buffer del primero....
¿qué hago ahora? Tengo una estrategia basada en canales, ¿hay alguna alternativa de sustitución?
¿qué hago ahora? Tengo una estrategia basada en canales, ¿hay alguna alternativa de sustitución?
Para vender, puede incrustar con#recurso
la posibilidad de añadir diferentes plazos a UNA hoja (en diferentes ventanas pero en una sola hoja)
Por favor, aconséjeme dónde ir y dónde cavar). ¿es posible a través de mql o WInApi?
tal vez hay ejemplos del artículo que no pude encontrar(
Por favor, ayúdame a arreglar esto! da error 'Void' - declaración sin tipo 36 4 y ¿dónde debo reordenar o escribir return?
//--------------------------------------------------------------------
Void OnTick()
{
void se escribe con minúscula en lugar de con mayúscula. Mira, es un color diferente. Poner el cursor sobre esta palabra y pulsar F1 - a menudo ayuda.
Aparecen tantos mensajes de error después de arreglarlo... He arreglado los mensajes de error, pero comprueba tú mismo la lógica
void se escribe con minúscula, no con mayúscula. Mira si es de otro color. Poner el cursor sobre esta palabra y pulsar F1 - a menudo ayuda.
Después de arreglarlo aparecen tantos mensajes de error... Arreglados los mensajes de error, pero comprueba tú mismo la lógica
¡Muchas gracias, amigo!
La variable int contiene exactamente el número de segundos desde 1970, mientras que la variable datetime contiene la fecha.
Si necesita una barra determinada en el historial, no importa cómo la especifique: por fecha o por número de segundos, en cualquier caso, la variable indicará la hora de apertura de esta barra en particular, independientemente de la llegada de nuevos ticks y de la apertura de nuevas barras.
Recién ahora descubrí que la función stat se recalcula si el indicador es llamado desde otro indicador, cuando ambos están en el gráfico. Es decir, una vez se calcula para sí mismo y la segunda vez para el indicador que lo llama. ¿Qué es?
En la imagen se muestra lo siguiente. El comentario en la parte superior es el valor del buffer en el indicador principal en el que tiene lugar el cálculo, y la impresión (abajo) es el mismo buffer, pero sólo llamado en otro indicador y emitido en la impresión. ¡¡¡¡¡La diferencia es significativa, PERO PORQUE!!!!!
elprimer archivo es el principal, el segundo llama al buffer del primero....