Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Здравствуйте Cameofx,
Спасибо за любезный ответ.
Эта система кодирования очень проста и легка.
Все делается вручную в MetaEditor.
На самом деле, система разрабатывается для разработки больших программ легко и с высокой скоростью.
Система должна быть также гибкой и надежной.
С наилучшими пожеланиями!
Это невероятная работа..... Как форум может отблагодарить вас? Благодарю и приветствую.
Я также благодарю вас за терпение, которое вы потратили на объяснение многих вопросов, которые я задавал. Я благодарю вас.
Сегодня я буду сравнивать программу, которая не сработала, 1_20[1] с этой программой, утверждение за утверждением. В обеих программах есть чему поучиться.
Вы упомянули ранее при разработке этой программы, что с гибкостью этой программы, функции могут быть добавлены. Функциями могут быть индикаторы, управление капиталом, суммирование позиций, модификация отложенных ордеров и т.д.? Можно ли добавить функцию, что когда сделка ликвидирована, на текущем баре больше не будет совершаться никаких сделок? Возможно, это не проблема для некоторых людей на форуме, но я бы хотел провести бэктест с опцией, при которой система не будет торговать сразу на текущем баре после ликвидации. Возможно ли это?
Спасибо, что вы здесь.
Пока.
Привет Ais
В сравнении есть некоторые тонкие изменения. Я занимался этим недолго, не завершил работу. Но бросается в глаза разница с iNewBar (). Исключив iNewBar (), и заменив переменную iFirstRun на iTime_0, это вынуждает
( ( ( iNewBar () ==TRUE) || (iFirst == 1 ) ) исключить из уравнения программы. iSignalOpen упрощается и выполняется быстрее.
Отличная работа.
Ваше здоровье
< отредактировано>
Вышеизложенное доказывает то же самое для iSignalClose. Очень легко понять, как управление проходит через программу.
Спасибо.
Здравствуйте, Ais
Нашел еще одно тонкое различие в iTryOpen и iTryClose. Видимого влияния нет. Но буду читать про операторы 'else-if' для ясности.
Спасибо еще раз.
Вернусь завтра.
Будь здоров
////////////////////////////////////////////////////////////////////< 1> // < Program : Property > //< > // #define 1 " " //< > // #define 2 " " //< > // </Program : Property > //< > // //< > // < Program : Content > //< > // //< > // < Structure 18 elements in 4 domains > //< > // < 1. Data 9 elements in 2 domains /> //< > // < 2. Code 9 elements in 2 domains /> //< > // </Structure 18 elements in 4 domains > //< > // //< > // < 1. Data 9 = 4 i 3 d - s > //< > // < 1.1. Input 8 = 5 i 3 d - s /> //< > // < 1.2. Buffer 1 = 1 i - d - s /> //< > // </1. Data 9 = 4 i 3 d - s > //< > // //< > // < 2. Code 9 / - i 80 l 3 o > //< > // < 2.1. Interface 6 / - i 69 l 3 o /> //< > // < 2.2. Special 3 / - i 11 l - o /> //< > // </2. Code 9 / - i 80 l 3 o > //< > // //< > // </Program : Content > //< >
////////////////////////////////////////////////////////////////////< 2> // < 1.1. Data : Input > //< > // //< > // < 1.1. Input 8 = 5 i 3 d - s > //< > // < 1. Strategy 4 = 2 i 2 d - s /> //< > // < 2. Trading 4 = 3 i 1 d - s /> //< > // </1.1. Input 8 = 5 i 3 d - s > //< > // //< > // < 1.1.1. Strategy 4 >=====================================//< > int iBaseLag = 20 ; //< > int iBaseBar = 1 ; //< > double dFactorTP = 1.0 ; //< > double dFactorSL = 2.0 ; //< > // </ 1.1.1. Strategy 4 >=====================================//< > // //< > // < 1.1.2. Trading 4 >======================================//< > int iTradeBarOnce = 1 ; //< > int iSlippage = 1 ; //< > int iMagic = 1 ; //< > double dLots = 0.1 ; //< > // </ 1.1.2. Trading 4 >======================================//< > // //< > // //< > // </1.1. Data : Input > //< >
////////////////////////////////////////////////////////////////////< 3> // < 1.2. Data : Buffer > //< > // //< > // < 1.2. Buffer 1 = 1 i - d - s > //< > // < 1. Flags 1 = 1 i - d - s /> //< > // </1.2. Buffer 1 = 1 i - d - s > //< > // //< > // < 1.2.1. Flags 1 >========================================//< > int iTradeBarTime = EMPTY ; //< > // </ 1.2.1. Flags 1 >========================================//< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // </1.2. Data : Buffer > //< >
////////////////////////////////////////////////////////////////////< 4> // < 2.1. Code : Interface > //< > // //< > // < 2.1. Interface 6 / - i 69 l 3 o > //< > // < 1. iReserved_1 - i - l - o /> //< > // < 2. iSignalOpen - i 17 l 1 o /> //< > // < 3. iSignalClose - i 15 l 1 o /> //< > // < 4. iGetTicket - i 7 l 1 o /> //< > // < 5. iTryOpen - i 15 l - o /> //< > // < 6. iTryClose - i 15 l - o /> //< > // </2.1. Interface 6 / - i 69 l 3 o > //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // </2.1. Code : Interface > //< >
////////////////////////////////////////////////////////////////////< 5> // < 2.1.1. Code : Interface : iReserved_1 > //< > //int iReserved_1 () // - i - l - o //< > //{ //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > //} //< > // </2.1.1. Code : Interface : iReserved_1 > //< >
////////////////////////////////////////////////////////////////////< 6> // < 2.1.2. Code : Interface : iSignalOpen > //< > int iSignalOpen () // - i 17 l 1 o //< > { //< > if ( iTradeBarTime == iTime ( 0 , 0 , 0 ) ) //< > if ( iTradeBarOnce == 1 ) return ( EMPTY ) ; //< > // //< > static int iTime_0 = EMPTY ; //< > if ( iTime_0 < iTime ( 0 , 0 , 0 ) ) //< > { iTime_0 = iTime ( 0 , 0 , 0 ) ; //< > iTradeBarTime = EMPTY ; //< > static double dHighest , dLowest ; //< > dHighest = High [ iHighest ( 0 , 0 , MODE_HIGH , //< > iBaseLag , iBaseBar ) ] ; //< > dLowest = Low [ iLowest ( 0 , 0 , MODE_LOW , //< > iBaseLag , iBaseBar ) ] ; //< > } // if //< > double dAsk = MarketInfo ( Symbol () , MODE_ASK ) ; //< > double dBid = MarketInfo ( Symbol () , MODE_BID ) ; //< > if ( dAsk > dHighest ) return ( OP_BUY ) ; //< > if ( dBid < dLowest ) return ( OP_SELL ) ; //< > return ( EMPTY ) ; //< > } //< > // </2.1.2. Code : Interface : iSignalOpen > //< >
////////////////////////////////////////////////////////////////////< 7> // < 2.1.3. Code : Interface : iSignalClose > //< > int iSignalClose () // - i 15 l 1 o //< > { //< > static int iTime_0 = EMPTY ; //< > if ( iTime_0 < iTime ( 0 , 0 , 0 ) ) //< > { iTime_0 = iTime ( 0 , 0 , 0 ) ; //< > static double dATR , dProfit , dLoss ; //< > dATR = iATR ( 0 , 0 , iBaseLag , iBaseBar ) ; //< > } // if //< > // //< > double dDelta = OrderOpenPrice () - OrderClosePrice () ; //< > // //< > if ( OrderType () == OP_BUY ) //< > { dProfit = -dDelta ; dLoss = dDelta ; } //< > else if ( OrderType () == OP_SELL ) //< > { dProfit = dDelta ; dLoss = -dDelta ; } //< > else return ( EMPTY ) ; //< > // //< > if ( dProfit > dATR * dFactorTP ) return ( TRUE ) ; //< > if ( dLoss > dATR * dFactorSL ) return ( TRUE ) ; //< > return ( EMPTY ) ; //< > } //< > // </2.1.3. Code : Interface : iSignalClose > //< >
////////////////////////////////////////////////////////////////////< 8> // < 2.1.4. Code : Interface : iGetTicket > //< > int iGetTicket () // - i 7 l 1 o //< > { //< > for ( int i = OrdersTotal () - 1 ; i >= 0 ; i -- ) //< > { //< > if ( OrderSelect ( i , SELECT_BY_POS ) == TRUE ) //< > if ( OrderMagicNumber () == iMagic ) //< > return ( OrderTicket () ) ; //< > } // for //< > return ( EMPTY ) ; //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > } //< > // </2.1.4. Code : Interface : iGetTicket > //< >
////////////////////////////////////////////////////////////////////< 9> // < 2.1.5. Code : Interface : iTryOpen > //< > int iTryOpen () // - i 15 l - o //< > { //< > int iCommand = iSignalOpen () ; //< > if ( iCommand == EMPTY ) return ; //< > if ( iCommand == OP_BUY ) //< > { string sType = "Buy" ; int iColor = Blue ; } //< > else { sType = "Sell" ; iColor = Red ; } //< > // //< > if ( iCommand == OP_BUY ) int iMode = MODE_ASK ; //< > else iMode = MODE_BID ; //< > double dPrice = MarketInfo ( Symbol () , iMode ) ; //< > // //< > OrderSend ( Symbol () , iCommand , dLots , //< > NormalizeDouble ( dPrice , Digits ) , //< > iSlippage , 0 , 0 , "" , iMagic , 0 , iColor ) ; //< > // //< > int iTrap = GetLastError () ; //< > if ( iTrap == 0 ) //< > { Alert ( sType , " Was a Big Success" ) ; } //< > else { Alert ( sType , " open exception " , iTrap ) ; } //< > } //< > // </2.1.5. Code : Interface : iTryOpen > //< >
////////////////////////////////////////////////////////////////////< 10> // < 2.1.6. Code : Interface : iTryClose > //< > int iTryClose () // - i 15 l - o //< > { //< > int iCommand = iSignalClose () ; //< > if ( iCommand == EMPTY ) return ; //< > if ( OrderType () == OP_BUY ) //< > { string sType = "Buy" ; int iColor = Red ; } //< > else { sType = "Sell" ; iColor = Blue ; } //< > // //< > if ( OrderProfit () > 0 ) string sAct = "Take" ; //< > else sAct = "Stop" ; //< > double dPrice = OrderClosePrice () ; //< > // //< > OrderClose ( OrderTicket () , OrderLots () , //< > NormalizeDouble ( dPrice , Digits ) , //< > iSlippage , iColor ) ; //< > // //< > int iTrap = GetLastError () ; //< > if ( iTrap == 0 ) { iTradeBarTime = iTime ( 0 , 0 , 0 ) ; //< > Alert ( sType , " closed with Hard " , sAct ) ; } //< > else { Alert ( sType , " close exception " , iTrap ) ; } //< > } //< > // </2.1.6. Code : Interface : iTryClose > //< >
////////////////////////////////////////////////////////////////////< 11> // < 2.2. Code : Special > //< > // //< > // < 2.2. Special 3 / - i 11 l - o > //< > // < 1. init - i 1 l - o /> //< > // < 2. deinit - i 1 l - o /> //< > // < 3. start - i 9 l - o /> //< > // </2.2. Special 3 / - i 11 l - o > //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // </2.2. Code : Special > //< >
////////////////////////////////////////////////////////////////////< 12> // < 2.2.1. Code : Special : Init > //< > int init () // - i 1 l - o //< > { //< > Alert ( "" , "Start " , UninitializeReason () ) ; //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > } //< > // </2.2.1. Code : Special : Init > //< >
////////////////////////////////////////////////////////////////////< 13> // < 2.2.2. Code : Special : Deinit > //< > int deinit () // - i 1 l - o //< > { //< > Alert ( "" , "Stop " , UninitializeReason () ) ; //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > // //< > } //< > // </2.2.2. Code : Special : Deinit > //< >
////////////////////////////////////////////////////////////////////< 14> // < 2.2.3. Code : Special : Start > //< > int start () // - i 9 l - o //< > { //< > // < 2.2.3.1. History data inspection 4 >`````````````````````````//< > static int iTrigger = 0 ; if ( iTrigger == 0 ) { //< > if ( ( iTime ( 0 , 0 , 0 ) == 0 ) //< > || ( iBars ( 0 , 0 ) < iBaseLag + iBaseBar ) ) //< > return ; else iTrigger = 1 ; } //< > // </2.2.3.1. History data inspection 4 >`````````````````````````//< > // //< > // < 2.2.3.2. Main routine 3 >````````````````````````````````````//< > int iTicket = iGetTicket () ; //< > // //< > if ( iTicket < 0 ) iTryOpen () ; //< > else iTryClose () ; //< > // </2.2.3.2. Main routine 3 >````````````````````````````````````//< > // //< > // < 2.2.3.3. Exception handler 2 >```````````````````````````````//< > int iTrap = GetLastError () ; //< > if ( iTrap > 0 ) Alert ( "Exception " , iTrap ) ; //< > // </2.2.3.3. Exception handler 2 >```````````````````````````````//< > } //< > // </2.2.3. Code : Special : Start > //< > ////////////////////////////////////////////////////////////////////< 0>
Полный список изменений:
1. Глобальная переменная "int iTradeBarOnce = 1 ;" была добавлена в домен "Data : Input".
2. Создан домен "Data : Buffer" был создан.
3. Глобальная переменная "int iTradeBarTime" была добавлена в домен "Data : Buffer".
4. Добавлена пустая функция "iReserved_1 ()".
5. Изменена функция "iSignalOpen ()".
6. Изменена функция "iTryClose ()".
Примечания:
1. Глобальная переменная "int iTradeBarOnce" разрешает/запрещает повторять торговлю на одном и том же баре.
2. Значение этой переменной "0" разрешает, а значение "1" запрещает повторять торговлю на одном и том же баре.
3. Глобальная переменная "int iTradeBarTime" передает время открытия торгуемого бара из функции "iTryClose ()".
4. Функция "iSignalOpen ()" получает это значение и использует его для управления повторяющейся сделкой.
5. Мне нравится использовать значения "1" и "0" вместо "TRUE" и "FALSE".
6.
Следующие утверждения эквивалентны, но первое работает быстрее:
if ( iTradeBarTime == iTime ( 0 , 0 , 0 ) ) //< > if ( iTradeBarOnce == 1 ) return ( EMPTY ) ; //< >
if ( ( iTradeBarTime == iTime ( 0 , 0 , 0 ) ) //< > && ( iTradeBarOnce == 1 ) ) return ( EMPTY ) ; //< >
7. Пустая функция "iReserved_1" была добавлена для будущего использования.
Последнее редактирование: 2010.03.18 22:54
Состояние: Готов
Привет Гекльберри и привет!
Чуть позже я немного расширю программу, чтобы сделать ее более читабельной.
Будьте здоровы!