[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 702
T-G: Agora os negócios são metade do tempo que eram antes.
Em vez de procurar uma nova barra, basta fazer uma pausa entre as aberturas, definida em 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);
}
Verifico desta forma (em negrito, ignorar /*PauseMain*/ - é um valor aleatório de atraso em 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;
Pergunta - é possível que os objetos gráficos não sejam simulados no testador de estratégia no modo não-visual? Por exemplo, eu estava testando o código que abre negócios quebrando o canal OBJ_REGRESSION - ele opera no modo visual, mas se eu o desligar, não há negócios... Como conduzir a otimização neste caso?
nas configurações do indicador - tipo de linha, cor e espessura/largura
SetIndexStyle(0, DRAW_NONE); SetIndexStyle(1, DRAW_LINE,EMPTY); SetIndexStyle(2, DRAW_NONE); SetIndexStyle(3, DRAW_NONE); SetIndexStyle(4, DRAW_NONE); está aqui ....... mas minha ferramenta tem uma largura de linha 0 e eu quero definir a largura de 2 para não ter que lidar com configurações ...... não sei como fazê-lo .... não sou programador .... me ajude por favor ))))
Eu não sei nada sobre programação. Eu queria fazer o filtro CCI (https://www.forex-tsd.com/indicators-metatrader-4/3356-cci-filter.html) o mesmo para WPR, mudei CCI para WPR e mudei os níveis nas condições de cor das barras (não -100, 0, 100 como CCI, mas -60, -50 e -40, porque em MT WPR tem variação de -100 a 0, eu acho, certo?) Mas por alguma razão, ele se compila com um erro, e a tela mostra um indicador monocromático. O que está errado? Obrigado de antemão
tempo int estático = Tempo[0];
se (tempo < Tempo[0]){
// vela velha
{} else {
// vela nova
tempo = Tempo[0];
}
Agora os negócios são metade do tempo que eram antes.
Em vez de procurar uma nova barra, basta fazer uma pausa entre as aberturas, definida em segundos:
Verifico desta forma (em negrito, ignorar /*PauseMain*/ - é um valor aleatório de atraso em 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 faça sentido...
Boris, pequena correção no código, esqueceu de adicionar um reset da posição da matriz, ao retornar ao lote original:
MUITO OBRIGADO! Tudo funcionou. Vai bem e coloca os lotes certos!!!
Como posso mudar ou acrescentar algo ao código para definir a largura da barra?
em configurações de indicadores - tipo de linha, cor e largura/espessura
nas configurações do indicador - tipo de linha, cor e espessura/largura
SetIndexStyle(1, DRAW_LINE,EMPTY);
SetIndexStyle(2, DRAW_NONE);
SetIndexStyle(3, DRAW_NONE);
SetIndexStyle(4, DRAW_NONE);
está aqui ....... mas minha ferramenta tem uma largura de linha 0 e eu quero definir a largura de 2 para não ter que lidar com configurações ...... não sei como fazê-lo .... não sou programador .... me ajude por favor ))))
Eu não sei nada sobre programação. Eu queria fazer o filtro CCI (https://www.forex-tsd.com/indicators-metatrader-4/3356-cci-filter.html) o mesmo para WPR, mudei CCI para WPR e mudei os níveis nas condições de cor das barras (não -100, 0, 100 como CCI, mas -60, -50 e -40, porque em MT WPR tem variação de -100 a 0, eu acho, certo?) Mas por alguma razão, ele se compila com um erro, e a tela mostra um indicador monocromático. O que está errado? Obrigado de antemão
A memória é inútil).
Eu quero saber que tipo de moeda, prescreveu as variáveis
string EUR="EURUSD";
string GBP="GBPUSD";
simbolismo de corda = "";
Escrevo o seguinte no início :
symbl = symbl(); // obter o valor do símbolo
Quero comparar o valor recebido do simbolismo com os valores de minhas variáveis e, se corresponderem, então tomar uma decisão.
interruptor (simbl) {
caso .......... então nada acontece (( pausa;
caso ................ break;
}
Refrescar minha memória))
Descobri que somente uma constante de caráter pode ser usada, mas como faço isso?
A memória é inútil).
Eu quero saber que tipo de moeda, prescreveu as variáveis
string EUR="EURUSD";
string GBP="GBPUSD";
simbolismo de corda = "";
Escrevo o seguinte no início :
symbl = symbl(); //receber o valor do símbolo
Quero comparar o valor recebido de simbolismo com os valores de minhas variáveis e, se corresponderem, então tomar uma decisão.
interruptor (simbl) {
caso .......... então nada acontece (( pausa;
caso ................ break;
}
Refresque sua memória ))