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

 

...

Это не ошибка в коде

Перейдите в Tools->History center и затем выберите и загрузите 1-минутные данные с символа, который вы хотите протестировать (для 90% точности вам нужны только 1-минутные данные, остальные загружать не нужно).

Badguy:
Привет кодеры

Я все еще изучаю свои первые шаги в MQL-коде.

В чем причина, когда у меня в журнале появляется следующее сообщение:

Testgenerator:

unmatched data error (volume limit 159 at 2009.05.06 19 15 exceeded )

где я должен искать в коде?

Спасибо
 
abundance:
Мы с другом работаем над советником. На определенном этапе ему (советнику) нужно считать и получить цену в определенное время, скажем, 17:00 EST... и т.д.

Подскажите, пожалуйста, как это сделать, вместо того, чтобы считать ценовые бары в обратном направлении? Может уже есть функция, написанная для этого? Пожалуйста, помогите. Спасибо всем и да благословит вас Бог!

B rgds/abundance

iBarShift(...) помогает найти номер бара на вашем графике, затем использовать Close или Open.

 
Roger09:
iBarShift(...) помогает найти номер бара на вашем графике, затем использовать Close или Open.

Спасибо, Роджер. Это было полезно. И извините, что не объяснил яснее. Нам нужны цены Bid и Ask. Как нам их получить? Извините, если это глупый вопрос.

B rgds/abundance

 

Ошибка данных

Здравствуйте, Младен

Спасибо за быстрый ответ.

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

Я думаю, что это проблема с Custom-Indicator.

Я буду строить в следующих инди: AllAverages_v2.3

double ALL_AVERAGES_0 = iCustom(NULL,ALL_AVERA_TF, "AllAverages_v2.3",ALL_AVERA_PERIOD,ALL_AVERA_SHIFT,ALL_AVERA_METHOD,ALL_AVERA_PRICE,0);

теперь у меня следующее сообщение: invalid index buffer number in iCustom function

Как правильно определить этот iCustom?

Привет Младен Я нашел проблему

Я забыл один параметр: Color

правильное определение:

double ALL_AVERAGES_0 = iCustom(NULL,ALL_AVERA_TF, "AllAverages_v2.3",ALL_AVERA_PERIOD,ALL_AVERA_SHIFT,ALL_AVERA_METHOD,ALL_AVERA_PRICE,ALL_AVERA_COLOR,0);

mladen:
Это не ошибка в коде Перейдите в Tools->History center и затем выберите и загрузите 1-минутные данные с символа, который вы хотите протестировать (все, что вам нужно для 90% точности - это 1-минутные данные, остальные загружать не нужно).
Файлы:
 
abundance:
Спасибо, Роджер. Это было полезно. И извините, что не объяснил яснее. Нам нужны цены Bid и Ask. Как нам их получить? Извините, если это глупый вопрос B rgds/abundance

Все цены на графиках - это Bid. Ask=Bid+MarketInfo(Symbol(),MODE_SPREAD)*Point;

 

Ограничение сделок

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

//Проверка позиции

bool IsTrade = False;

for (int i = 0; i < Total; i ++) {

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {

IsTrade = True;

if(OrderType() == OP_BUY) {

//Close

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

//| Сигнал Begin(Exit Buy)|

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

if (CloseBuy1_1 >= CloseBuy1_2) Order = SIGNAL_CLOSEBUY;

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

//| Сигнал Окончание(Выход из покупки) |

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

if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");

if (!EachTickMode) BarCount = Bars;

IsTrade = False;

continue;

}

//Трейлинг-стоп

if(UseTrailingStop && TrailingStop > 0) {

if(Bid - OrderOpenPrice() > Point * TrailingStop) {

if(OrderStopLoss() < Bid - Point * TrailingStop) {

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

} else {

//Close

Если кто-то может помочь, буду очень признателен.

 
Styex:
Я начал писать базовый советник с помощью одного из этих конструкторов советников, генерирующих шаблоны. Кажется, я понял суть шаблона советника, но мне нужен способ сделать так, чтобы советник вводил только одну сделку максимум. Сейчас он продолжает генерировать сделки и вызывает просадку до смешного. Если кто-нибудь может помочь, я буду очень признателен.
if (OrdersTotal() == 0)

{

//Check position

bool IsTrade = False;

for (int i = 0; i < Total; i ++) {

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {

IsTrade = True;

if(OrderType() == OP_BUY) {

//Close

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

//| Signal Begin(Exit Buy) |

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

if (CloseBuy1_1 >= CloseBuy1_2) Order = SIGNAL_CLOSEBUY;

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

//| Signal End(Exit Buy) |

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

if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");

if (!EachTickMode) BarCount = Bars;

IsTrade = False;

continue;

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

if(Bid - OrderOpenPrice() > Point * TrailingStop) {

if(OrderStopLoss() < Bid - Point * TrailingStop) {

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

} else {

//Close

}
 

Спасибо OnTheRoad

Я нашел этот советник, но я не понимаю некоторые из них.

bool get_signal()

{

bool enable_trade = false;

int trend_up = 0;

int trend_down = 0;

int i;

ArrayInitialize( TradeSign, false );

if( Bars >= 100 ){

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

Buf_MA[0][ i ] = calc_SMA( PERIOD_M30, MA_prm_1, i );

Buf_MA[1][ i ] = calc_SMA( PERIOD_M30, MA_prm_2, i );

Buf_MA[2][ i ] = calc_SMA( PERIOD_M30, MA_prm_3, i );

Buf_MA[3][ i ] = calc_SMA( PERIOD_M30, MA_prm_4, i );

Buf_MA[4][ i ] = calc_SMA( PERIOD_M30, MA_prm_5, i );

}

double vRSI = iRSI( Symbol(), PERIOD_M5, RSI_period5, PRICE_CLOSE, 0 );

double vRSI2 = iRSI( Symbol(), PERIOD_M1, RSI_period1, PRICE_CLOSE, 0 );

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

if((Buf_MA[2] < Buf_MA[1]) && (Buf_MA[1] < Buf_MA[0])){

trend_up++;

}

}

if((trend_up > 3) && (vRSI <= RSI_lower) && (vRSI2 <= RSI_lower)){

TradeSign[SIG_Buy] = true;

enable_trade = true;

}

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

if((Buf_MA[2] > Buf_MA[1]) && (Buf_MA[1] > Buf_MA[0])){

trend_down++;

}

}

if((trend_down > 3) && (vRSI >= RSI_upper) && (vRSI2 >= RSI_upper)){

TradeSign[SIG_Sell] = true;

enable_trade = true;

}

}

return (enable_trade);

}

double calc_SMA( int timeframe, int period, int offset )

{

double vMA = 0;

double sum = 0;

int i;

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

sum += iClose( Symbol(), timeframe, i + offset );

}

vMA = sum / period;

return(vMA);

}

есть часть, где "trendup>3", это вычисляется из массива? Как работает массив, который может дать "trendup>3"? Это для того, чтобы узнать среднее значение по одной линии (эта линия, скорее всего, пойдет вверх или вниз)? Я не понимаю, как это работает.
Файлы:
 

Как сбросить экспертов при достижении целевой прибыли? Я использую стратегию мартингейла, но она не открывает лоты последовательно...

пример: лоты 0.1, 0.2, 0.4, 0.8, 1.6

открываю лоты: 0.1, 0.2, 0.4 -> тейк-профит на лоте 0.4, но следующие лоты 0.8, 0.1, 0.2, 0.4...

кто-нибудь может помочь...????

int T=0;

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

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if(OrderSymbol()==Symbol() && OrderComment()==Name_ExpertS)

{ T++;

if(OrderType()==OP_BUY) s=1;

if(OrderType()==OP_SELL) s=2;

Last=OrderOpenPrice();

}}

if (Lots<0.1) Lots=0.1;

for (int j=0;j<T;j++)

{

Lots=LotsUP[j];

}
 

High/Low с критериями

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

1. Ищем закрытие, которое ниже, чем все 20 предыдущих закрытий (вторая стрелка - эта точка), затем (2) 12 баров спустя закрытие должно быть выше, чем 12 предыдущих закрытий (третья стрелка). Этот восходящий тренд будет продолжаться до тех пор, пока (3) не произойдет закрытие, которое будет ниже, чем 7 предыдущих закрытий (четвертая стрелка).

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

Есть идеи или примеры, как использовать ArrayMinimum и ArrayMaximum? Или есть ли способ заставить работать функции iLowest и iHighest?

Файлы: