![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
leonid553 |
![]()
Сообщение
#201
|
![]() Группа: Активный участник Сообщений: 2 002 Регистрация: 14.4.2006 Из: г.Самара Пользователь №: 28 Спасибо сказали: 11 раз(а) ![]() |
Код //+------------------------------------------------------------------+ // |Амка // | Dimi //| http://www.tradersforum.net.ru/ //+------------------------------------------------------------------+ #property copyright "Dimi" #property link "http://www.tradersforum.net.ru/" //---- input parameters--------- extern int periodAMA_1=13; extern int periodAMA_2=34; //------------------------------ extern int TP=30; extern int SL=30; extern double Lot=0.1; extern int Slippage=3; int ticket; //********************************************************************* //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { // вычисляем текущие значения Амок быстрой и медленной double AMKA1_0 = iCustom(NULL, 0, "AMkA", periodAMA_1 ,nfast,nslow,Pow,dK,use_stdev,app_price,0,0); double AMKA2_0 = iCustom(NULL, 0, "AMkA", periodAMA_2 ,nfast,nslow,Pow,dK,use_stdev,app_price,0,0); // вычисляем предыдущее значения Амки быстрой double AMKA1_1 = iCustom(NULL, 0, "AMkA", periodAMA_1 ,nfast,nslow,Pow,dK,use_stdev,app_price,0,1); //===== Ищем возможность войти в рынок ========================================================= int Orders=OrdersTotal (); //получаем кол-во открытых ордеров if (Orders==0) //если нет открытых ордеров { //---------проверяем условие на покупку---------------------------- if ( бла-бла-бла ) { ticket=OrderSend(Symbol(),0,Lot,Ask,Slippage,Bid-SL*Point,Ask+TP*Point,NULL,0,0,CLR_NONE); if (ticket<0) { Print("Ошибка открытия ордера BUY #", GetLastError()); return (0); } } //------------------------------------------------------------------ //--------проверяем условие на продажу------------------------------ if (бла- бла - бла) { ticket=OrderSend(Symbol(),1,Lot,Bid,Slippage,Bid+SL*Point,Bid-TP*Point,NULL,0,0,CLR_NONE); if (ticket<0) { Print("Ошибка открытия ордера SELL #", GetLastError()); return (0); } } //------------------------------------------------------------------ } //==================================================================== //---- return(0); } //+------------------------------------------------------------------+ Вместо параметров : nfast,nslow,Pow,dK,use_stdev,app_price Нужно задать пока конкретные числа. Кот . у тебя стоят по умолчанию. |
Dimi |
![]()
Сообщение
#202
|
![]() Группа: Активный участник Сообщений: 236 Регистрация: 12.4.2006 Пользователь №: 14 Спасибо сказали: 2 раз(а) ![]() |
Привет!!! Давай наверное начнем с самого начала. Я так понял, что вот эти (nfast,nslow,Pow,dK,use_stdev,app_price) вообще не нужны или??? Тогда получиться, где вводим переменные
Код double CrossUp[]; double CrossDown[]; extern string AMkA1 ="Параметры 1 AMkA"; extern int periodAMA = 14; //период расчёта к-та эффективности extern string AMkA2 ="Параметры 2 AMkA"; extern int periodAMA2 = 40; //период расчёта к-та эффективности extern double Deviation1 = -0.01; extern double Deviation2 = -0.02; extern double Arrow_Delta1 = 1.5; extern double Arrow_Delta2 = 1.5; static int PrevBar = 0; //------------------- extern int TP=30; extern int SL=30; //extern double Lot=0.1; extern int Slippage=3; //------------------- int ticket; int MAGIC; color clModifyBuy = Green; color clModifySell = Blue; //-- Подключаемые модули -- #include <b-Lots.mqh> #include <a-SimpleTrailing.mqh> //--------------------------- //********************************************************************* Тогда дальше получиться Код //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { double val=iCustom(NULL, 0, "AMkA",periodAMA,0,i); О, пока я тут все сочинял, ты уже написал!!! ![]() |
leonid553 |
![]()
Сообщение
#203
|
![]() Группа: Активный участник Сообщений: 2 002 Регистрация: 14.4.2006 Из: г.Самара Пользователь №: 28 Спасибо сказали: 11 раз(а) ![]() |
Значения (nfast,nslow,Pow,dK,use_stdev,app_price) нам нужны. Но мы не будем их делать пока переменными. Оставим их постоянными. И в
iCustom(NULL, 0, "AMkA", periodAMA_1 ,nfast,nslow,Pow,dK,use_stdev,app_price,0,0); мы вствим вместо них - их числовые значения кот. стоят по умолчанию в самом индюке. nfast=2, nslow=30, Pow=2, dK=1, pp_price=5 А вот параметр use_stdev=true, - правильно ли он поставлен в iCustom ? Да и др. параметры тоже... |
leonid553 |
![]()
Сообщение
#204
|
![]() Группа: Активный участник Сообщений: 2 002 Регистрация: 14.4.2006 Из: г.Самара Пользователь №: 28 Спасибо сказали: 11 раз(а) ![]() |
условия на покупку - вместо
if (бла- бла-бла) if ((AMKA1_1 < AMKA2_0) && (AMKA1_0 > AMKA2_0) ) // покупаем //************************************************** на продажу: if ((AMKA1_1 > AMKA2_0) && (AMKA1_0 < AMKA2_0) ) |
Dimi |
![]()
Сообщение
#205
|
![]() Группа: Активный участник Сообщений: 236 Регистрация: 12.4.2006 Пользователь №: 14 Спасибо сказали: 2 раз(а) ![]() |
Если кто знает, отзовитесь пожалуйста!!!
Вот это условие правильно записано??? Код //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { // вычисляем текущие значения Амок быстрой и медленной double AMKA1_0 = iCustom(NULL, 0, "AMkA", periodAMA_1 ,2,30,2,1,5,0,0); double AMKA2_0 = iCustom(NULL, 0, "AMkA", periodAMA_2 ,2,30,2,1,5,0,0); // вычисляем предыдущее значения Амки быстрой double AMKA1_1 = iCustom(NULL, 0, "AMkA", periodAMA_1 ,2,30,2,1,5,0,0); Вот этот вот iCustom непонятно |
leonid553 |
![]()
Сообщение
#206
|
![]() Группа: Активный участник Сообщений: 2 002 Регистрация: 14.4.2006 Из: г.Самара Пользователь №: 28 Спасибо сказали: 11 раз(а) ![]() |
вот только обратил внимание, что индюк работае скорее всего по открытиям баров. Не по тикам.
Это означает, что надо ввести в советник соотв. условие. Тогда последний "0" в строке, - это значение Амок ( быстр. и медл.) на вновь только что открывшемся баре. double AMKA1_0 = iCustom(NULL, 0, "AMkA", periodAMA_1 ,2,30,2,1,5,0,0); double AMKA2_0 = iCustom(NULL, 0, "AMkA", periodAMA_2 ,2,30,2,1,5,0,0); А в след. строке - "1" - означает значение индюка на предыдущем баре. double AMKA1_1 = iCustom(NULL, 0, "AMkA", periodAMA_1 ,nfast,nslow,Pow,dK,use_stdev,app_price,0,1); - у тебя неверно скопировано - глянь внимательнее! (посл. цифра=1 а не 0 как у тебя ) ВВел в код условие работы по ценам открытия. И вроде заработал эксперт. Код //+------------------------------------------------------------------+ // |Амка // | Dimi //| http://www.tradersforum.net.ru/ //+------------------------------------------------------------------+ #property copyright "Dimi" #property link "http://www.tradersforum.net.ru/" //---- input parameters--------- extern int periodAMA_1=13; extern int periodAMA_2=34; //------------------------------ extern int TP=55; extern int SL=55; extern double Lot=0.1; extern int Slippage=3; int ticket; static int prevtime = 0; //********************************************************************* //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { if(Time[0] == prevtime) return(0); prevtime = Time[0]; // вычисляем текущие значения Амок быстрой и медленной double AMKA1_0 = iCustom(NULL, 0, "AMkA", periodAMA_1 ,2,30,2,1,5,0,0); double AMKA2_0 = iCustom(NULL, 0, "AMkA", periodAMA_2 ,2,30,2,1,5,0,0); // вычисляем предыдущее значения Амки быстрой double AMKA1_1 = iCustom(NULL, 0, "AMkA", periodAMA_1 ,2,30,2,1,5,0,1); //===== Ищем возможность войти в рынок ========================================================= int Orders=OrdersTotal (); //получаем кол-во открытых ордеров if (Orders==0) //если нет открытых ордеров { //---------проверяем условие на покупку---------------------------- if ((AMKA1_1 < AMKA2_0) && (AMKA1_0 > AMKA2_0) ) { ticket=OrderSend(Symbol(),0,Lot,Ask,Slippage,Bid-SL*Point,Ask+TP*Point,NULL,0,0,CLR_NONE); if (ticket<0) { Print("Ошибка открытия ордера BUY #", GetLastError()); return (0); } } //------------------------------------------------------------------ //--------проверяем условие на продажу------------------------------ if ((AMKA1_1 > AMKA2_0) && (AMKA1_0 < AMKA2_0) ) { ticket=OrderSend(Symbol(),1,Lot,Bid,Slippage,Bid+SL*Point,Bid-TP*Point,NULL,0,0,CLR_NONE); if (ticket<0) { Print("Ошибка открытия ордера SELL #", GetLastError()); return (0); } } //------------------------------------------------------------------ } //==================================================================== //---- return(0); } //+------------------------------------------------------------------+ Тестировать нужно по ценам открытия. И даже с этими параметрами от фонаря - показал прибыль за 2007г. на н4 по фунту.! Но что-то не совсем пока корректно он работает. |
Dimi |
![]()
Сообщение
#207
|
![]() Группа: Активный участник Сообщений: 236 Регистрация: 12.4.2006 Пользователь №: 14 Спасибо сказали: 2 раз(а) ![]() |
Вот глянь, Леонид. Вставил твои библиотеки.
![]() |
leonid553 |
![]()
Сообщение
#208
|
![]() Группа: Активный участник Сообщений: 2 002 Регистрация: 14.4.2006 Из: г.Самара Пользователь №: 28 Спасибо сказали: 11 раз(а) ![]() |
Надо разобраться с
iCustom(NULL, 0, "AMkA", periodAMA_1 ,2,30,2,1,5,0,0); Похоже здесь ошибка у нас |
leonid553 |
![]()
Сообщение
#209
|
![]() Группа: Активный участник Сообщений: 2 002 Регистрация: 14.4.2006 Из: г.Самара Пользователь №: 28 Спасибо сказали: 11 раз(а) ![]() |
to NoName,
для блокировки никак не могу разобраться с таким вариантом открытия (в др. вариант вставил): Код bool isNewBar=false; if (ExpertBars !=Bars) {ExpertBars=Bars; isNewBar=true; } int OrdersGBP=OrdersTotal();//ExpertOrder(); if (isNewBar) { if (OrdersGBP!=0) ZeroBarOrd=true; //есть ордер else ZeroBarOrd=false; //нет ордера } //*************************************************************** if (!ZeroBarOrd) { //-------Проверяем условие на покупку------------- if ( (Stochastic_1<En0_low) && (Stochastic_0>En0_low) ) { //---- Цикл открытия ордера ------------------------------------------- int Cnt=1; while (Cnt <= 5) { //-----покупаем-------------- Lots=GetSizeLot(); ticketGBP=OrderSend("GBPUSD",OP_BUY,Lots,ask_GBP,3,bid_GBP - sl_GBPUSD_long*point_GBP, ask_GBP+tp_GBPUSD_long*point_GBP,"M_1", MagicGBP, 0, Blue); if (ticketGBP > 0) break; else { Print ("Ошибка открытия Buy GBP#", ErrorDescription( GetLastError() ), " попытка ", Cnt); if (Cnt==5) return(0); //если за 5 попыток не закрыли - выходим Cnt++; Sleep(15000); // ждём 15 секунд } } } Не соображу - куда вставить строку " else ZeroBarOrd=true; " Куда ни поставлю - всё невпопад! |
NoName |
![]()
Сообщение
#210
|
![]() Группа: Активный участник Сообщений: 514 Регистрация: 1.5.2006 Из: Украина, Кременчуг Пользователь №: 146 Спасибо сказали: 0 раз(а) ![]() |
По куску кода сложно понять куда именно его нужно вставить в данном случае. Но основная идея такая: ZeroBarOrd (переменная отвечающая за наличие ордеров на нулевом баре) получает значение true в случаях:
1. При появлении нового бара и наличии открытой позиции, иначе false; 2. При каждом успешном открытии позиции. 1 пункт выполняется строками: Код if (isNewBar) { if (OrdersGBP!=0) ZeroBarOrd=true; //есть ордер else ZeroBarOrd=false; //нет ордера А что бы выполнился второй пункт нужно вставить: Код ZeroBarOrd=true; после каждого успешного открытия позиции.Ещё раз напомню что ZeroBarOrd - статическая переменная объявленная на глобальном уровне. Код static bool ZeroBarOrd; |
![]() ![]() |
![]() |
Текстовая версия | Сейчас: 11.5.2025, 20:42 |