T-G: Ahora los oficios son la mitad de largos que antes
En lugar de comprobar si hay una nueva barra, sólo hay que hacer una pausa entre las aperturas, establecida en segundos:
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание : Возвращает количество секунд после открытия последней позиций. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+datetime SecondsAfterOpenLastPos(string sy="", int op=-1, int mn=-1) {
datetime t;
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 (t<OrderOpenTime()) t=OrderOpenTime();
}
}
}
}
}
}
return(TimeCurrent()-t);
}
Lo compruebo así (en negrita, ignora /*PauseMain*/ - es un valor aleatorio de retraso en minutos - de 5 a 9):
// Тут начало функции открытия позиций (открытие Buy)....
// Ниже код открытия Sell:
PauseMain51=random(5,9)*60;
if (!Lot()) return;// Средств не хватает на миним.- выходимif (!OpnSell51 || !Trade) return;
if (ExistPositions(NULL, OP_SELL, 51, 0)) // Если есть такой же открытый Sell
{
if (SecondsAfterOpenLastPos(NULL, OP_SELL, 51)<=/* PauseMain51*/ 7*60) return; (7*60 сек = 7 минут)
// Если прошло мало времени - валим
}
//---------------------- Позиции ещё нету - открываемся...-----------------------------
divider=1;
Lots=GetSizeLot();
Magic=51; // Задаём магик... 5 и 1; 5 = пять минут, 1 = стратегия 1
New_Comm="Sell_M5_Стратегия_1_Основная позиция"; // Задаём комментарий для позиции
Lots_New=NormalizeLot(Lots/divider, False, NULL);
OpenPosition(NULL,OP_SELL,Lots_New,0,pb-tp*po,Magic,New_Comm);
return;
Pregunta - ¿Es posible que los objetos gráficos no se simulen en el probador de estrategias en el modo no visual? Por ejemplo, estaba probando un código que abre operaciones rompiendo el canal OBJ_REGRESSION - se negocia en el modo visual, pero si lo desactivo, no hay operaciones... ¿Cómo llevar a cabo la optimización en este caso?
en la configuración del indicador - tipo de línea, color y grosor/anchura
SetIndexStyle(0, DRAW_NONE); SetIndexStyle(1, DRAW_LINE,EMPTY); SetIndexStyle(2, DRAW_NONE); SetIndexStyle(3, DRAW_NONE); SetIndexStyle(4, DRAW_NONE); está aquí ....... pero mi herramienta tiene un ancho de línea de 0 y quiero poner el ancho de 2 para no tener que lidiar con la configuración ...... no sé cómo hacerlo .... no soy un programador .... así que ayúdame ))))
No sé nada de programación en absoluto. Quería hacer el filtro CCI (https://www.forex-tsd.com/indicators-metatrader-4/3356-cci-filter.html) igual para WPR, cambié CCI a WPR y cambié los niveles en las condiciones de coloración de las barras (no -100, 0, 100 como CCI, sino -60, -50 y -40, porque en MT WPR tiene un rango de -100 a 0, creo, ¿no?) Pero por alguna razón se compila con un error, y la pantalla muestra un indicador monocromático. ¿Qué ocurre? Gracias de antemano
Quiero saber qué tipo de moneda, prescribió las variables
cadena EUR="EURUSD"; cadena GBP="GBPUSD";
string symbl = "";
Escribo lo siguiente al principio :
symbl = symbl(); //recibir el valor del símbolo
Quiero comparar el valor recibido de symbl con los valores de mis variables, y si coinciden, entonces tomar una decisión.
switch (symbl) {
caso .......... entonces no pasa nada (( break;
caso ................ break;
}
Refresca tu memoria ))
Los muelles del conmutador dicen claramente que la expresión entre paréntesis, es decir, symbl debe ser de tipo entero, pero tú lo estás encadenando...
static int time = Time[0];
si (tiempo < Tiempo[0]){
// vela vieja
} si no {
// nueva vela
tiempo = Tiempo[0];
}
Ahora los oficios son la mitad de largos que antes
En lugar de comprobar si hay una nueva barra, sólo hay que hacer una pausa entre las aperturas, establecida en segundos:
Lo compruebo así (en negrita, ignora /*PauseMain*/ - es un valor aleatorio de retraso en minutos - de 5 a 9):
// Тут начало функции открытия позиций (открытие Buy).... // Ниже код открытия Sell: PauseMain51=random(5,9)*60; if (!Lot()) return; // Средств не хватает на миним.- выходим if (!OpnSell51 || !Trade) return; if (ExistPositions(NULL, OP_SELL, 51, 0)) // Если есть такой же открытый Sell { if (SecondsAfterOpenLastPos(NULL, OP_SELL, 51)<=/* PauseMain51*/ 7*60) return; (7*60 сек = 7 минут) // Если прошло мало времени - валим } //---------------------- Позиции ещё нету - открываемся...----------------------------- divider=1; Lots=GetSizeLot(); Magic=51; // Задаём магик... 5 и 1; 5 = пять минут, 1 = стратегия 1 New_Comm="Sell_M5_Стратегия_1_Основная позиция"; // Задаём комментарий для позиции Lots_New=NormalizeLot(Lots/divider, False, NULL); OpenPosition(NULL,OP_SELL,Lots_New,0,pb-tp*po,Magic,New_Comm); return;Espero que tenga sentido...
Boris, pequeña corrección en el código, se me olvidó añadir un reset de la posición del array, al volver al lote original:
MUCHAS GRACIAS. Todo salió bien. ¡¡Va bien y pone los lotes correctos!!
¿Cómo puedo cambiar o añadir algo al código para establecer el ancho de la barra en el histograma?
en los ajustes del indicador - tipo de línea, color y anchura/grosor
en la configuración del indicador - tipo de línea, color y grosor/anchura
SetIndexStyle(1, DRAW_LINE,EMPTY);
SetIndexStyle(2, DRAW_NONE);
SetIndexStyle(3, DRAW_NONE);
SetIndexStyle(4, DRAW_NONE);
está aquí ....... pero mi herramienta tiene un ancho de línea de 0 y quiero poner el ancho de 2 para no tener que lidiar con la configuración ...... no sé cómo hacerlo .... no soy un programador .... así que ayúdame ))))
No sé nada de programación en absoluto. Quería hacer el filtro CCI (https://www.forex-tsd.com/indicators-metatrader-4/3356-cci-filter.html) igual para WPR, cambié CCI a WPR y cambié los niveles en las condiciones de coloración de las barras (no -100, 0, 100 como CCI, sino -60, -50 y -40, porque en MT WPR tiene un rango de -100 a 0, creo, ¿no?) Pero por alguna razón se compila con un error, y la pantalla muestra un indicador monocromático. ¿Qué ocurre? Gracias de antemano
La memoria es inútil).
Quiero saber qué tipo de moneda, prescribió las variables
cadena EUR="EURUSD";
cadena GBP="GBPUSD";
string symbl = "";
Escribo lo siguiente al principio :
symbl = symbl(); //recibir el valor del símbolo
Quiero comparar el valor recibido de symbl con los valores de mis variables, y si coinciden, entonces tomar una decisión.
switch (symbl) {
caso .......... entonces no pasa nada (( break;
caso ................ break;
}
Refresca mi memoria))
Me he dado cuenta de que sólo se puede utilizar una constante de carácter, pero ¿cómo lo hago?
La memoria es inútil).
Quiero saber qué tipo de moneda, prescribió las variables
cadena EUR="EURUSD";
cadena GBP="GBPUSD";
string symbl = "";
Escribo lo siguiente al principio :
symbl = symbl(); //recibir el valor del símbolo
Quiero comparar el valor recibido de symbl con los valores de mis variables, y si coinciden, entonces tomar una decisión.
switch (symbl) {
caso .......... entonces no pasa nada (( break;
caso ................ break;
}
Refresca tu memoria ))