Как кодировать? - страница 233

 
CoeyCoey:
Привет всем,

Я работаю над модификацией измерителя силы валюты, чтобы показать силу валюты, основанную на времени от графика. В настоящее время используется следующий код:

aHigh = MarketInfo(mySymbol,MODE_HIGH); // set a high today

aLow = MarketInfo(mySymbol,MODE_LOW); // set a low today

aBid = MarketInfo(mySymbol,MODE_BID); // set a last bid

aAsk = MarketInfo(mySymbol,MODE_ASK);

Я понимаю, что MODE_HIGH и MODE_LOW получают максимумы и минимумы текущего дня. Как я могу получить максимум и минимум текущего таймфрейма графика?

Спасибо!

P.S. Я не программист, поэтому используйте маленькие слова, пожалуйста:)

Вам не обязательно использовать MarketInfo(). Если вы хотите получить текущий High, используйте High[0] и Low[n], Close[n], Open[n]. 'n' означает смещение от текущего бара. Например, чтобы получить High бара перед текущим, вы можете использовать High[1], так как текущий бар равен 0, а бар перед ним имеет смещение 1 от текущего.

Для проверки максимумов, минимумов, открытий, закрытий других таймфреймов, отличных от просматриваемого на графике, можно использовать функции iHigh(), iLow(), iClose() и iOpen.

Пример использования приведен ниже.

double high_of_gbpusd_4hours_current = iHigh("gbpusd", period_h4, 0);

 

Спасибо! Ребята, вы молодцы!

 
mfurlend:

Я думаю, что у меня практически все работает (не уверен???), но по какой-то причине массив заполняется большим количеством значений '0' вместе с легитимными значениями.

Вот как я бы это сделал:

#define TICKET 0

#define PRICES 1

double ResumeArray[0,2];

int CheckForResume()

{

ResumeCheck = TimeLocal()+(PERIOD_M1*60)*5;

bool success = false;

int k;

for (int i = 0; i<OrdersTotal();i++)

{

if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))continue;

if (OrderType() > OP_SELL || OrderProfit()> Cutoff)continue;

int arraycount=ArrayRange(ResumeArray,TICKET);

bool found = false;

for (k=arraycount-1; k>=0; k--)

{

if (ResumeArray[k,TICKET] == OrderTicket())

{

found = true;

if (ResumeArray[k,PRICES] + Cutoff < OrderProfit())break;

else

{

success=true;

Print ("ELSE");

ResumeArray[k,PRICES] = OrderProfit();

break;

}

}

}

if (found == false)

{

arraycount = ArrayResize(ResumeArray,arraycount+1)/2;

ResumeArray[arraycount-1,TICKET] = OrderTicket();

ResumeArray[arraycount-1,PRICES] = OrderProfit();

success=true;

}

}

if(success)return (1);

else return(0);

}

Вам не обязательно использовать определения TICKET и PRICES, я просто включил их, чтобы показать, как работает 2-мерный массив. Просто замените все вхождения TICKET и PRICES на 0 и 1 соответственно.

Я заменил команду 'return' в цикле 'for' на 'break', поэтому все открытые ордера будут обработаны.

Следует отметить, что закрытые ордера никогда не удаляются из массива, поэтому он будет продолжать увеличиваться в размерах и замедлять работу вашей платформы.

d4v3

 

Ограничение истории баров

Я буду очень благодарен, если кто-нибудь сможет добавить опцию ограничения истории баров в этот скрипт RenkoLiveChart_v3.2.

Это занимает слишком много ресурсов компьютера.

Файлы:
 

Базовый советник по оповещениям

................[решено] ....................

 

уменьшение шума

Привет всем - Я искал способ ограничить шум в торговле и сделать более быструю отсечку.

Идея на самом деле довольно проста

шум показан на этом рисунке, он динамический, то есть постоянно меняется в зависимости от состояния рынка.

Вот некоторый код, который я сделал для закрытия, если кто-то хочет использовать его, не стесняйтесь, он просто нуждается в некоторых множителях.

int profit = OrderProfit() + OrderSwap() + OrderCommission();

int Trades = ScanTrades(0,0);

если (Trades == 0) TS1 = 0;

if ((ScanTrades(2,0) > 0) && (profit < 0)) TS= ((MarketInfo(Symbol(),MODE_BID)) + шум + проскальзывание);

if ((ScanTrades(2,0) > 0) && (profit > 0)) TS= ((MarketInfo(Symbol(),MODE_BID)) + шум );

if ((ScanTrades(1,0) > 0) && (profit < 0)) TS= ((MarketInfo(Symbol(),MODE_BID)) - шум - Проскальзывание);

if ((ScanTrades(1,0) > 0) && (profit > 0)) TS= ((MarketInfo(Symbol(),MODE_BID)) - noise );

//шорт

if ((ScanTrades(2,0) > 0)&& (TS1 ==0)) TS1 = TS;

if ((ScanTrades(2,0) > 0)&& (TS < TS1)) TS1 = TS;

if ((ScanTrades(2,0) > 0) && (MarketInfo(Symbol(),MODE_BID) > TS1)) CloseOrder(2);

//длинный

if ((ScanTrades(1,0) > 0)&& (TS1 ==0)) TS1 = TS;

if ((ScanTrades(1,0) > 0)&& (TS > TS1)) TS1 = TS;

if ((ScanTrades(1,0) > 0) && (MarketInfo(Symbol(),MODE_BID) < TS1)) CloseOrder(1);

как лучше всего получить текущий и предыдущий максимум и минимум на гистограмме. Мне нужно создать переменную "noise".

Я пробовал это, но это сбивает с толку, t1 и l1 иногда равны 0. Это очень удручает, так как это все, что стоит между "завершением" всей ea, если такое вообще возможно.

double hh2=Высота;

double ll2=Низ;

double hh3=Высота;

double ll3=Low;

double t1,l1,noise;

//шум = перекрытие предыдущих баров

if ((hh2 - hh3) > 0 ) t1 =(hh3); //в основном выбирается самый низкий "высокий" бар между двумя - "бычий

если ((hh3- hh2) > 0 ) t1=(hh2); //медвежий рынок

если ((ll2 - ll3) > 0 ) l1 =(ll2); //выбираем самый высокий низкий бар - бычий

если ((ll3 - ll2) > 0 ) l1=(ll3); //медвежий

шум =(t1-l1);

Print("t1 = ",t1,"; l1 = ",l1);

типичные результаты печати: t1=0 l1=94.3 больше всего раздражает то, что hh2 и hh3 == я просто не знаю, что делать, я просто не вижу проблемы в моем коде.

Файлы:
cutoff.jpg  5 kb
 

кто может мне помочь?

может ли кто-нибудь показать мне, как сделать новый индикатор, который основан на 3 знакомых индикаторах? Я создаю стратегию на основе 3 индикаторов, которые показывают очень сильные сигналы на покупку/продажу, но я хочу создать 1 индикатор...

 

пожалуйста, внесите изменения в еа

Пожалуйста, помогите мне реализовать следующие изменения в этом ea

1)Добавить в час

A) индикатор fisher_ 11 с настройками 33,0.5,0.5

B) сглаженный индикатор tcf с настройками 17, 8, 0.7

в) Также я хочу, чтобы индикатор dinap _basic не разрешал сделки, когда он рисует против направления сигнала, т.е. если он рисует вверх, вход по сигналам на покупку НЕ разрешен, если вниз, вход по сигналам на продажу НЕ разрешен.

2) Добавьте в 15 минут

A) индикатор супертренда

B) индикатор Trendlord

Управление капиталом

1) Открыть 2 сделки со стоп-лоссом 3% от общей суммы счета (1.5%) каждая.

2) Одна сделка с тейк-профитом 80 пунктов или 2,2%, а вторая с тейк-профитом 3,8%.

3) Удвоить размер лота для пятой сделки после 4 последовательных убытков, затем линейно увеличивать лот для последующих сделок до двух последовательных выигрышей и вернуться к стандартному размеру лота.

4) Трейлинг стоп в 12 пунктов (выше для продажи и ниже для покупки бывшей свечи индикатора atrstops_v1 для всех сделок.

Это все, пожалуйста, помогите

Файлы:
 

Вы могли бы добиться точно такого же результата с помощью одной строки кода.

GlobalVariableSet("TRENDSET_"+Symbol());

Вы также могли бы добавить временной интервал, чтобы сделать его еще более уникальным.

Честно говоря, не совсем понимаю, в чем смысл вашего сообщения.

С уважением,

Lux

 

Как вызвать значение из H1 с помощью iCustom?

Здравствуйте,

Я пытаюсь написать очень простой индикатор, но у меня не получается вызвать значение Laguerre из H1.

Что я хочу сделать?

Используя 1M TF

сигнал на покупку: Laguerre пересекает уровень 0.15, голова вверх и Laguerre H1 > 0.75

сигнал на продажу: Laguerre пересечение уровня 0.75 направляется вниз и Laguerre H1 < 0.15.

Я сделал индикатор для простого креста и он работает, проблема в том, что когда я пытаюсь проверить значение из Laguerre H1: это беспорядок!

Я попробовал 2 способа:

Первый:

#property indicator_chart_window

#property indicator_buffers 2

#property indicator_color1 SeaGreen

#property indicator_color2 Red

#property indicator_width1 3

#property indicator_width2 3

double CrossUp[];

double CrossDown[];

extern bool SoundON=true;

double alertTag;

//+------------------------------------------------------------------+

//| Custom indicator initialization function |

//+------------------------------------------------------------------+

int init()

{

//---- indicators

SetIndexStyle(0, DRAW_ARROW, EMPTY,3);

SetIndexArrow(0, 233);

SetIndexBuffer(0, CrossUp);

SetIndexStyle(1, DRAW_ARROW, EMPTY,3);

SetIndexArrow(1, 234);

SetIndexBuffer(1, CrossDown);

//----

return(0);

}

//+------------------------------------------------------------------+

//| Custom indicator deinitialization function |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| Custom indicator iteration function |

//+------------------------------------------------------------------+

int start() {

int limit, i;

int counted_bars=IndicatorCounted();

//---- check for possible errors

if(counted_bars<0) return(-1);

//---- last counted bar will be recounted

if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

for(i = 0; i <= limit; i++) {

if ( (iCustom(NULL,0,"Laguerre",0.66,9500,0,i) > 0.15) && (iCustom(NULL,0,"Laguerre",0.66,9500,0,i+1) < 0.15)

&&(iCustom(Symbol(),PERIOD_H1,"Laguerre",0.66,9500,0,i) > 0.75)) //check for buy signal

{

CrossUp = Close;

}

else if ( (iCustom(NULL,0,"Laguerre",0.66,9500,0,i) 0.75)

&& (iCustom(Symbol(),PERIOD_H1,"Laguerre",0.66,9500,0,i) < 0.15)) //check for sell signal

{

CrossDown = Close;

}

if (SoundON==true && i==1 && CrossUp > CrossDown && alertTag!=Time[0]){

Alert("SHORT signal on ",Symbol()," ",Period());

alertTag = Time[0];

}

if (SoundON==true && i==1 && CrossUp < CrossDown && alertTag!=Time[0]){

Alert("Long Signal on ",Symbol()," ",Period());

alertTag = Time[0];

}

}

return(0);

}[/CODE]

second one:

[CODE]//+------------------------------------------------------------------+

//| Shift.mq4 |

//| me |

//|

//+------------------------------------------------------------------+

#property copyright "me"

#property indicator_chart_window

#property indicator_buffers 2

#property indicator_color1 Lime

#property indicator_color2 Red

#property indicator_width1 4

#property indicator_width2 4

//---- buffers

double ExtMapBuffer1[];

double ExtMapBuffer2[];

bool Fact_Up = true; // Fact of report that market..

bool Fact_Dn = true; //..is bullish or bearish

//+------------------------------------------------------------------+

//| Custom indicator initialization function |

//+------------------------------------------------------------------+

int init()

{

//---- indicators

SetIndexStyle(0,DRAW_ARROW);

SetIndexArrow(0,241);

SetIndexBuffer(0,ExtMapBuffer1);

SetIndexEmptyValue(0,0.0);

SetIndexStyle(1,DRAW_ARROW);

SetIndexArrow(1,242);

SetIndexBuffer(1,ExtMapBuffer2);

SetIndexEmptyValue(1,0.0);

//----

return(0);

}

//+------------------------------------------------------------------+

//| Custom indicator deinitialization function |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| Custom indicator iteration function |

//+------------------------------------------------------------------+

int start()

{

//int limit;

int counted_bars=IndicatorCounted();

//---- last counted bar will be recounted

if(counted_bars>0) counted_bars--;

if(counted_bars<0) return(-1);

//limit=Bars-counted_bars;

//----

double MA; // MA value on 0 bar

double MA2;

double MA3;

double MA4;

//--------------------------------------------------------------------

double value1, value2, value3;

for (int i=Bars-1;i>=0;i--)

//---- main loop

//for(int i=0; i<limit; i++)

{value1=0.0;

value2=0.0;

value3=0.0;

//--------------------------------------------------------------------

// Checking if bullish

if( (iCustom(Symbol(),NULL,"Laguerre",0,i) > 0.15) && (iCustom(Symbol(),NULL,"Laguerre",0,i+1) < 0.15) && Fact_Up == true

&&(iCustom(Symbol(),PERIOD_H1,"Laguerre",0,i) > 0.75))

{

Fact_Dn = true; // Report about bullish market

Fact_Up = false; // Don't report bullish market

// Alert("BUY SIGNAL.");

value1=Open;

}

//--------------------------------------------------------------------

// Checking if bearish

if( (iCustom(Symbol(),NULL,"Laguerre",0,i) 0.75) && Fact_Dn == true

&&(iCustom(Symbol(),PERIOD_H1,"Laguerre",0,i) < 0.15))

{

Fact_Up = true; // Report about bearish market

Fact_Dn = false; // Don't report bearish market

// Alert("SELL SIGNAL.");

value2=Open;

}

ExtMapBuffer1=value1;

ExtMapBuffer2=value2;

}

//----

return(0);

}

//+------------------------------------------------------------------+

оба не работают, проблема в красной линии, без красной линии он работает отлично.

Я пробовал (iCustom(Symbol(),PERIOD_H1, "Laguerre",0,i) < .....)

(iCustom(Symbol(),PERIOD_H1, "Laguerre",0,0) < ....)

(iCustom(Symbol(),60, "Laguerre",0,i) < ....)

(iCustom(Symbol(),60, "Laguerre",0,0) < .....)

Я пробовал также с переменными: (iCustom(Symbol(),PERIOD_H1, "Laguer re",0.66,9500,0,i)

iF i put:

Print(iCustom(Symbol(),60, "Laguerre ",0,i)); перед "if" возвращает случайное число...

но с: Print(iCustom(Symbol(),60, "Laguerre ",0,0)); он возвращает хорошее значение из H1

Теперь проблема остается той же, если я использую iCustom(Symbol(),60, "Laguerre",0,0); внутри "if", это не работает...

проблема в "for" и "i" и в значении "shift" iCustom, но я не могу разобраться.

буду очень рад вашей помощи!

Я приложил индикатор Laguerre, который я использую, если вы хотите попробовать.

Если кто-то готов перекодировать его с нуля, пожалуйста, не стесняйтесь.

Это сводит меня с ума...

Файлы:
laguerre.mq4  3 kb
Причина обращения: