Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Восстановление типа данных из индикатора
Здравствуйте
Возможно ли восстановить тип данных из индикатора (3 MA Cross w alert), чтобы поместить его в советник?
Вот что я хочу сделать:
В индикаторе (3 MA Cross w alert) я поместил тип данных :
double execute_trade = "ok_buy" или execute_trade = "ok_sell" здесь :
************Indicator ************
if ((fasterMAnow > slowerMAnow &&
fasterMAprevious <= slowerMAprevious &&
fasterMAafter > slowerMAafter &&
mediumMAnow > slowerMAnow )
||
(fasterMAnow > slowerMAnow &&
mediumMAnow > slowerMAnow &&
mediumMAprevious <= slowerMAprevious &&
mediumMAafter > slowerMAafter ))
{
CrossUp = Low - Range*0.5;
string execute_trade = "ok_buy";
}
if ((fasterMAnow < slowerMAnow &&
fasterMAprevious >= slowerMAprevious &&
fasterMAafter < slowerMAafter &&
mediumMAnow < slowerMAnow )
||
(fasterMAnow < slowerMAnow &&
mediumMAnow < slowerMAnow &&
mediumMAprevious >= slowerMAprevious &&
mediumMAafter < slowerMAafter ))
{
CrossDown = High + Range*0.5;
execute_trade = "ok_sell";
}
************************
и я хотел бы восстановить "excute_trade" в моем советнике следующим образом :
***********EA***************
if (excute_trade== "ok_buy")
Order = SIGNAL_BUY;
if (excute_trade== "ok_sell")
Ордер = СИГНАЛ_ПРОДАЖИ;
****************************
Но я не знаю, как сделать
помогите пожалуйста
С наилучшими пожеланиями
Может ли кто-нибудь быть так добр и подсказать мне, как написать следующий код?
Если моя Ea включена на графике M30, я хочу, чтобы код говорил:
if(на таймфрейме M5 сегодняшнее закрытие>вчерашнее закрытие)
{
.........
}Сегодняшнее закрытие - это текущий BID; вчерашнее закрытие не зависит от таймфрейма, поэтому не имеет значения таймфрейм M30 или M5.
{
...
}
Привет
Возможно ли восстановить тип данных из индикатора (3 MA Cross w alert), чтобы поместить его в советник?
Вот что я хочу сделать:
В индикаторе (3 MA Cross w alert) я поместил тип данных :
double execute_trade = "ok_buy" или execute_trade = "ok_sell" здесь :
************Indicator ************
if ((fasterMAnow > slowerMAnow &&
fasterMAprevious <= slowerMAprevious &&
fasterMAafter > slowerMAafter &&
mediumMAnow > slowerMAnow )
||
(fasterMAnow > slowerMAnow &&
mediumMAnow > slowerMAnow &&
mediumMAprevious <= slowerMAprevious &&
mediumMAafter > slowerMAafter ))
{
CrossUp = Low - Range*0.5;
string execute_trade = "ok_buy";
}
if ((fasterMAnow < slowerMAnow &&
fasterMAprevious >= slowerMAprevious &&
fasterMAafter < slowerMAafter &&
mediumMAnow < slowerMAnow )
||
(fasterMAnow < slowerMAnow &&
mediumMAnow < slowerMAnow &&
mediumMAprevious >= slowerMAprevious &&
mediumMAafter < slowerMAafter ))
{
CrossDown = High + Range*0.5;
execute_trade = "ok_sell";
}
************************
и я хотел бы восстановить "excute_trade" в моем советнике следующим образом :
***********EA***************
if (excute_trade== "ok_buy")
Order = SIGNAL_BUY;
if (excute_trade== "ok_sell")
Ордер = СИГНАЛ_ПРОДАЖИ;
****************************
Но я не знаю, как сделать
помогите пожалуйста
С наилучшими пожеланиямиВы должны использовать функцию iCustom для получения значения буферов (т.е. стрелок);
double iCustom( string symbol, int timeframe, string name, ..., int mode, int shift)
Вычисляет указанный пользовательский индикатор и возвращает его значение. Пользовательский индикатор должен быть скомпилирован (файл *.EX4) и находиться в каталоге terminal_directory\experts\indicators.
Параметры:
символ - Символ, данные которого должны быть использованы для расчета индикатора. NULL - текущий символ.
timeframe - Таймфрейм. Это может быть любое из значений перечисления Timeframe. 0 означает текущий таймфрейм графика.
name - Имя скомпилированной программы пользовательского индикатора.
... - Набор параметров (если необходимо). Передаваемые параметры и их порядок должны соответствовать порядку раскрытия и типу внешних переменных пользовательского индикатора.
mode - Индекс строки. Может быть от 0 до 7 и должен соответствовать индексу, используемому одной из функций SetIndexBuffer.
shift - Индекс значения, взятого из буфера индикатора (сдвиг относительно текущего бара на заданное количество периодов назад).
Пример:
double val=iCustom(NULL, 0, "SampleInd",13,1,0);
В вашем случае синтаксис должен быть следующим:
if(iCustom(NULL, 0, "3 MA Cross w_Alert v2", p1, , , , p10, 0, 0) > 0) // Buy
{
...
}
if(iCustom(NULL, 0, "3 MA Cross w_Alert v2", p1, , , , p10, 1, 0) > 0) // Sell
{
...
}
Параметры p1 - p10 - это значения, которые нужно передать индикатору в качестве внешних параметров. Например, p1 означает значение, которое будет присвоено FasterMA, p2 - FasterShift, и так далее до последнего внешнего объявления p10 SoundAlert. Смотрите код индикатора, чтобы узнать их порядок и значение.
Спасибо, Мишель.
Но что если код находится в коде индикатора?
Это:
if(Close[pos]>iHigh(Symbol(),PERIOD_M5,[pos+1])?????
Gidday Я медленно исправляю ошибки в некоторых моих ea (и многому учусь по пути), но что это значит.
2007.10.24 21:22:24 1998.11.20 06:00 The Abyss GBPJPY,Daily: недопустимое двойное число в качестве параметра 6 для функции OrderSend
Я не могу найти ничего об этой ошибке, на что я должен обратить внимание.int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)
Как вы можете видеть, параметр шесть - это стоплосс. Убедитесь, что ваш стоплосс определен как int. Далее, убедитесь, что в команде OrderSend() вы умножаете стоплосс на точку. Это преобразуется в правильное двойное значение для валюты, которой вы торгуете.
Пример для длинной позиции:
ticketa=OrderSend(Symbol(),OP_BUY,lotize,Ask,slip,Ask-intStopLoss*Point,Ask+intTakeProfit*Point, "Comment",magic,0,Green);
Пример для краткости:
ticketb=OrderSend(Symbol(),OP_SELL,lotize,Bid,slip,Bid+intStopLoss*Point,Bid-intTakeProfit*Point, "Comment",magic,0,Blue);
Надеюсь, это поможет.
Спасибо, Вульф.
Это очень помогло, но открыло новую проблему lol теперь он покупает, но не продает ну не в том месте. Я пытался купить, когда все три инди синие и продать, когда все красные.
Думаю, я выбрал правильное название "Бездна" для ea, так как именно там я и сижу, пытаясь найти выход. LOL
2007.11.24 10:14:44 2007.11.23 12:00 The Abyss EURUSD,H4: Ошибка при открытии ордера SELL: 0
void CheckForSignals() {
double TML=iCustom(NULL,0, "TrendManager",TM_Period,TM_Shift,0,shift);
double TMS=iCustom(NULL,0, "TrendManager",TM_Period,TM_Shift,1,shift);
double hasOpenLong=iCustom(NULL,0, "Heiken_Ashi_Smoothed",MaMetod,MaPeriod,MaPeriod2,1,shift) ;
double hasCloseLong=iCustom(NULL,0, "Heiken_Ashi_Smoothed",MaMetod,MaPeriod,MaPeriod2,3,shift) ;
double hasOpenShort=iCustom(NULL,0, "Heiken_Ashi_Smoothed",MaMetod,MaPeriod,MaPeriod2,0,shift) ;
double hasCloseShort=iCustom(NULL,0, "Heiken_Ashi_Smoothed",MaMetod,MaPeriod,MaPeriod2,2,shift) ;
double SDLL=iCustom(NULL,0, "Slope Direction Line",period,method,price,0,shift);
double SDLS=iCustom(NULL,0, "Slope Direction Line",period,method,price,1,shift);
buysig=false;
sellsig=false;
closebuy=false;
closesell=false;
bool Long1 = TML;
bool Short1 = TMS;
bool Long2 = SDLL;
bool Short2 = SDLS;
bool Long3 = hasOpenLong > hasCloseLong;
bool Short3 = hasOpenShort < hasCloseShort;
buysig = Long1 && Long2 && Long3;
sellsig = Short1 && Short2 && Short3;
closebuy=sellsig;
closesell=buysig;
}
void CheckForOpen() {
if (last==Time[0]) return;
int res,ord;
двойная запись, остановка;
ord=CalculateCurrentOrders();
if (ord!=0) CheckForClose();
//---- условия покупки
if (buys< buysig) {
res=OpenAtMarket(OP_BUY,Lots);
if (res<0) Print("Ошибка открытия ордера BUY : ",(GetLastError()));
else last=Time[0];
}
//---- условия продажи
if (sells< sellsig) {
res=OpenAtMarket(OP_SELL,Lots);
if (res<=0) Print("Ошибка открытия ордера SELL : ",(GetLastError()));
else last=Time[0];
}
}
int OpenAtMarket(int mode,double lot) {
int tr,col;
double openprice;
tr=0; while (tr<5 && !IsTradeAllowed()) { tr++; Sleep(2000); }
RefreshRates();
if (mode==OP_SELL) {
openprice=Bid;
col=Red;
} else {
//openprice=nd(Ask);
openprice=Ask;
col=Blue;
}
OrderSend(Symbol(),mode,lot,openprice,slippage,sl,tp,EAName+Magic,Magic,0,col);
}
return;
//+------------------------------------------------------------------+
//| Проверка условий закрытия ордера |
//+------------------------------------------------------------------+
void CheckForClose() {
int total;
//----
total=OrdersTotal();
for(int i=total;i>=0;i--)
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
if(OrderMagicNumber()!=Magic || OrderSymbol()!=Symbol()) continue;
//---- проверка типа ордера
if(OrderType()==OP_BUY && closebuy) CloseAtMarket(OrderTicket(),OrderLots());
if(OrderType()==OP_SELL && closesell) CloseAtMarket(OrderTicket(),OrderLots());
}
}
bool CloseAtMarket(int ticket,double lot) {
bool bres=false; int tr;
tr=0; while (tr<5 && !IsTradeAllowed()) { tr++; Sleep(2000); }
RefreshRates();
bres=OrderClose(ticket,lot,OrderClosePrice(),slippage,White);
if (!bres) Print("Ошибка закрытия ордера : ",(GetLastError()));
}
Спасибо, Мишель.
Но что если код находится в коде индикатора?
Так ли это:
if(Close[pos]>iHigh(Symbol(),PERIOD_M5,[pos+1])?????Да, это может быть так; все зависит от того, что вы собираетесь делать...
Помогите плз - конвертировать в Mq4 - спасибо большое
Уважаемые все:
Я строю систему я думаю, что это очень хорошо, я тестировал идею до 3 месяцев, Теперь я пытаюсь кодировать индикатор, который будет как можно скорее на форуме, так что мы можем проверить его, и это действительно будет делать хорошие деньги я думаю:
Plz помогите мне сейчас преобразовать эти строки в кодировку mql4:
1- У меня есть переменная X, у нее будет значение, и я вычисляю его сейчас.
SO У нас есть X как целое число
2- индикатор должен проверять текущее время по Гринвичу, оно должно быть 6:00 утра по Гринвичу - Таймфрейм 1 H
-- проверить GMT TIME 6:00 утра, КОГДА эта свеча закроется, нам нужно вычислить следующую переменную этой свечи:
High - Low = A
A / 2 = B
B - High = C = SL
D = X * 30%
Buy_Entry = D + C
Buy_Target = C + (X * 60%)
Продажа_вход = C - D
Цель продажи = C - (X * 60%)
Затем:
Я хочу отобразить результат в виде линий на графике с серой зоной для покупки и красной зоной для короткой позиции в соответствии с входом для покупки и продажи и SL
Они должны автоматически появляться, как только свеча GMT 6:00 закончится, таймфрейм 1H, поэтому расчет должен быть в соответствии с 6:00 до 6:59 утра GMT свечи high и low.
PLZ Преобразуйте это в MQL4, чтобы я мог протестировать это и вернуться снова, чтобы опубликовать результат.
БОЛЬШОЕ СПАСИБО
Спасибо, Вулф.
Это помогло многим, но открыло новую проблему lol теперь он покупает, но не продает, ну не в том месте. Я пытался купить, когда все три инди синие и продать, когда все красные.
Думаю, я выбрал правильное название "Бездна" для ea, поскольку именно там я и сижу, пытаясь найти выход. LOLБено, я не уверен насчет этого. Обычно у меня не было хорошего опыта использования индикаторов, меняющих цвет, в советниках. Откройте окно данных с подключенными индикаторами и выясните, какое числовое значение возвращается для каждого цвета. Это может помочь вам в кодировании, также убедитесь, что вы вызываете правильный буфер индикатора в нужное время. (Я уверен, что вы уже сделали это) Вам может повезти больше, если вы опубликуете весь советник, если вам действительно нужна помощь. Кроме того, лично я бы сделал 2 отдельные функции Ordersend(), одну для шортов, другую для лонгов. Это только мое мнение, так проще следить за ситуацией.
Удачи, у всех нас были свои собственные версии "бездны"!
Спасибо, Вульф.
Я собираюсь попробовать вариант с 2 Ordersend, чтобы посмотреть, что получится. Как только у меня все получится, я опубликую это.