El archivo contiene dos indicadores y el Asesor Experto en el que estoy trabajando (test-cifr), los indicadores funcionan por sí mismos, pero no puedo pegarlos en el Asesor Experto (el único propósito del Asesor Experto es la salida de valores), por favor ayúdeme a entender por qué no lo hacen y cómo pegarlos.
Cómo puedo mostrar en el gráfico la inscripción en el instrumento actual Ganancias/pérdidas de las órdenes abiertas.
Es difícil comprobar en el Asesor Experto si ha abierto posiciones o no (terminal on/off) y recoger el volumen del último lote antes de cerrar el terminal.
//+------------------------------------------------------------------+//| Xrust.mq4 |//| Copyright 2013, MetaQuotes Software Corp. |//| http://www.metaquotes.net |//+------------------------------------------------------------------+#property copyright "Copyright 2013, MetaQuotes Software Corp."#property link "http://www.metaquotes.net"externint TimeFrame=0;//Если=0, то текушийexternstring FrApNam="Ap";//Имя линии соотв.Фракталу вверхexternstring FrDnNam="Dn";//Имя линии соотв.Фракталу внизexterncolor ClAp=Blue;//Цвет линии соотв.Фракталу вверхexterncolor ClDn=Red;//Цвет линии соотв.Фракталу вниз//-----------------------------------------------------------------------------+double FrApPrise,FrDnPrise;
//+------------------------------------------------------------------+//| expert initialization function |//+------------------------------------------------------------------+int init()
{
//----if(TimeFrame==0){TimeFrame=Period();}
IndicatorShortName("Factal_Level_Xrust"+TimeFrame);
FrApNam=StringConcatenate(FrApNam,TimeFrame);
FrDnNam=StringConcatenate(FrDnNam,TimeFrame);
//----return(0);
}
//+------------------------------------------------------------------+//| expert deinitialization function |//+------------------------------------------------------------------+int deinit()
{
//----ObjectDelete(FrDnNam);
ObjectDelete(FrApNam);
Comment(" ");
//----return(0);
}
//+------------------------------------------------------------------+//| expert start function |//+------------------------------------------------------------------+int start()
{
//----
LineAp();
LineDn();
int diap=MathRound((FrApPrise-FrDnPrise)/Point);
Comment("\n"," LineDn = ",FrDnPrise,
"\n", " LineAp = ",FrApPrise,
"\n"," diap = ",diap );
//----return(0);
}
//+------------------------------------------------------------------+//-----------------------------------------------------------------------------+// Ищет горизонтальную линию по имени перерисовывает если изменилась цена | //-----------------------------------------------------------------------------+void LineDn(){
FrDnPrise=0;
double FrPrise=NormalizeDouble(FindNearFractal(0,TimeFrame,MODE_LOWER),MarketInfo(Symbol(),MODE_DIGITS));
FrPrise=NormalizeDouble(FrPrise,MarketInfo(Symbol(),MODE_DIGITS));
//Comment(FrPrise);if(ObjectFind(FrDnNam)==0){
if(ObjectGet(FrDnNam,OBJPROP_PRICE1)==FrPrise){return;}}
FrDnPrise=FrPrise;
ObjectDelete(FrDnNam);
SetHLine(ClDn,FrDnNam,FrDnPrise,0,1);
WindowRedraw();
return;}
//-----------------------------------------------------------------------------+// Ищет горизонтальную линию по имени перерисовывает если изменилась цена | //-----------------------------------------------------------------------------+void LineAp(){
FrApPrise=0;
double FrPrise=NormalizeDouble(FindNearFractal(0,TimeFrame,MODE_UPPER),MarketInfo(Symbol(),MODE_DIGITS));
FrPrise=NormalizeDouble(FrPrise,MarketInfo(Symbol(),MODE_DIGITS));
if(ObjectFind(FrApNam)==0){
if(ObjectGet(FrApNam,OBJPROP_PRICE1)==FrPrise){return;}}
FrApPrise=FrPrise;
ObjectDelete(FrApNam);
SetHLine(ClAp,FrApNam,FrApPrise,0,1);
WindowRedraw();
return;}
//-----------------------------------------------------------------------------+ // Киму Респект и уважуха !!! | //+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 07.10.2006 |//| Описание : Поиск ближайшего фрактала. Возвращает ценовой уровень. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" или NULL - текущий символ) |//| tf - таймфрейм ( 0 - текущий ТФ) |//| mode - тип фрактала (MODE_LOWER|MODE_UPPER) |//+----------------------------------------------------------------------------+double FindNearFractal(string sy="0", int tf=0, int mode=MODE_LOWER) {
if (sy=="" || sy=="0") sy=Symbol();
double f=0;
int d=MarketInfo(sy, MODE_DIGITS), s;
if (d==0) if (StringFind(sy, "JPY")<0) d=4; else d=2;
for (s=2; s<100; s++) {
f=iFractals(sy, tf, mode, s);
if (f!=0) return(NormalizeDouble(f, d));
}
Print("FindNearFractal(): Фрактал не найден");
return(0);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 30.03.2008 |//| Описание : Установка объекта OBJ_HLINE горизонтальная линия |//+----------------------------------------------------------------------------+//| Параметры: |//| cl - цвет линии |//| nm - наименование ("" - время открытия текущего бара) |//| p1 - ценовой уровень (0 - Bid) |//| st - стиль линии (0 - простая линия) |//| wd - ширина линии (0 - по умолчанию) |//+----------------------------------------------------------------------------+void SetHLine(color cl, string nm="", double p1=0, int st=0, int wd=1) {
if (nm=="") nm=DoubleToStr(Time[0], 0);
if (p1<=0) p1=Bid;
if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_HLINE, 0, 0,0);
ObjectSet(nm, OBJPROP_PRICE1, p1);
ObjectSet(nm, OBJPROP_COLOR , cl);
ObjectSet(nm, OBJPROP_STYLE , st);
ObjectSet(nm, OBJPROP_WIDTH , wd);
}
o
o utilizar las funciones
intObjectFind( string name) //Поиск объекта с указанным именемdouble ObjectGet( string name, int prop_id) //Функция возвращает значение указанного свойства объекта
Gracias y buena suerte para ti artmedia70
Hola.
Cómo puedo mostrar en el gráfico la inscripción en el instrumento actual Ganancias/pérdidas de las órdenes abiertas.
Es difícil comprobar en el Asesor Experto si ha abierto posiciones o no (terminal on/off) y recoger el volumen del último lote antes de cerrar el terminal.
Gracias.
Hola, ¿no hay nadie que lo sepa?
Si he realizado alguna operación en el pasado, entonces uso la función orderprofit y luego sumo todo el historial de las operaciones.
Me pregunto si alguien tiene alguna respuesta a mi pregunta.
Hay un fallo en ese código. Aquí, sacado de contexto:
La cuestión es que la expresión
Por lo tanto, el valor del lote se redondeará a un decimal.
Siga leyendo, puede que le ayude.
Desde luego, eso espero. Gracias. Voy a leer el hilo anterior para reforzar este punto. No quiero dejar ningún hueco.
Hola, ¿hay alguien que sepa?
Bueno, a mi entender todo es elemental. Todo lo que necesitas es un conocimiento elemental.
1. Haces un exceso de pedidos.
2. Comprueba que la orden está abierta, es decir, que la hora de cierre de la orden es relativa a cero.
3. Si la orden está abierta, muestra sus datos necesarios, beneficio, tipo, etc.
Si he realizado alguna operación en el pasado, entonces uso la función orderprofit y luego sumo todo el historial de las operaciones.
Me pregunto si alguien tiene respuestas a mi pregunta.
Copie todo el código en su Asesor Experto
así
o
o utilizar las funciones
para buscar un objeto. No hay otra manera.No, funciona, pero el valor viene del techo
Intenta eliminar la configuración del indicador en el código del EA. A continuación, los ajustes se tomarán del código prescrito en el indicador.
A mí también me han salido valores de la izquierda, he quitado la configuración del código y está bien.