Автор |
Сообщение |
crn
Зарегистрирован: 28.03.2015
Сообщения: 30
|
Все привет.
Помогите пожалуйста перебраться с велс лаба на амиброкер.
думал легко освою ами, оказалось как бы не так.
не понимаю базовых вещей в AFL:
Почему работает вот этот код?
Cond1 = Close > MA( Close, 3 );
Cond2 = Volume > Ref( Volume, -1 );
Buy = Cond1 AND Cond2;
Sell = High > 1.30;
Почему нет перебора свечек в цикле как в велс лаб? Они как то сами по себе крутятся или как?
Почему не объявляются переменные Cond1 Cond2 и почему у них нет типа? я как понял переменные вообще не объявляются?
На amisite.ru прочитал пару уроков по AFL, но очевидно этого мало, а справка на англ.языке.
Ни туториалов, ни видео, ни каких либо прочих уроков по AFL в инете не нашел.
Если есть у кого такие материалы или ссылки, или простого робота с комментариями в коде, поделитесь пожалуйста, иначе я никак не могу к нему подступиться. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
crn писал(а): |
Все привет.
Помогите пожалуйста перебраться с велс лаба на амиброкер.
думал легко освою ами, оказалось как бы не так.
не понимаю базовых вещей в AFL:
Почему работает вот этот код?
Cond1 = Close > MA( Close, 3 );
Cond2 = Volume > Ref( Volume, -1 );
Buy = Cond1 AND Cond2;
Sell = High > 1.30;
Почему нет перебора свечек в цикле как в велс лаб? Они как то сами по себе крутятся или как?
|
Не совсем так, но для простоты можешь считать, что Перебор от крайней левой, до последней свечки присутствует изначально и его объявлять не надо.
crn писал(а): |
Почему не объявляются переменные Cond1 Cond2 и почему у них нет типа? я как понял переменные вообще не объявляются?
|
Вообще не объявляются. В момент инициализации тип определяется автоматически.
crn писал(а): |
На amisite.ru прочитал пару уроков по AFL, но очевидно этого мало, а справка на англ.языке.
Ни туториалов, ни видео, ни каких либо прочих уроков по AFL в инете не нашел.
Если есть у кого такие материалы или ссылки, или простого робота с комментариями в коде, поделитесь пожалуйста, иначе я никак не могу к нему подступиться. |
Будут вопросы - спрашивай. Разберешься постепенно. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
crn
Зарегистрирован: 28.03.2015
Сообщения: 30
|
|
Посмотреть профиль Отправить личное сообщение |
|
fujis84
Зарегистрирован: 07.01.2014
Сообщения: 56
|
|
Посмотреть профиль Отправить личное сообщение |
|
fujis84
Зарегистрирован: 07.01.2014
Сообщения: 56
|
|
Посмотреть профиль Отправить личное сообщение |
|
fujis84
Зарегистрирован: 07.01.2014
Сообщения: 56
|
crn писал(а): |
Почему не объявляются переменные Cond1 Cond2 и почему у них нет типа? |
Код: |
Cond1 = Close > MA( Close, 3 );
Cond2 = Volume > Ref( Volume, -1 );
printf( "Type of Cond1:" + typeof( Cond1 ) );
printf( "\nType of Cond2:" + typeof( Cond2 ) ); |
или
Код: |
Cond1 = Close > MA( Close, 3 );
Cond2 = Volume > Ref( Volume, -1 );
_Trace( "!CLEAR!" );
_Trace( "Type of Cond1:" + typeof( Cond1 ) );
_Trace( "Type of Cond2:" + typeof( Cond2) ); |
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
fujis84
Зарегистрирован: 07.01.2014
Сообщения: 56
|
Цитата: |
AFL is specifically designed to protect the newbie and people without coding experience
from programming stuff like memory allocation/deallocation, pointer manipulation,
declarations, type casting, etc.
So although it looks like C it is way more easy than C.
What is single operator in AFL (like array addition) involves many line of code in C
plus memory allocation/deallocation (and keeping track on all that).
SIMPLICITY OF USE plus compactness of code is the paramount design decision.
That's why arrays in AFL are automatically managed, have size that automatically
refers to "visible" area, so you can simply add arrays with single + operator.
With general purpose C language with "normal" arrays you would need to manage memory for arrays by yourself,
alignment (if size differs which elements to add), looping (you need to perform calculations
on individual elements of array).
(maybe you don't know but in C and there are no built-in dynamic arrays, only fixed compile-time size is supported,
and dynamic array is implemented via pointers and explicit memory allocation malloc/free)
As for "matrix" operations - that this does not belong to the definition of any general purpose language.
There are no "matrix" operations in any popular general purpose language C/C++/Java/JScript/Basic/Pascal.
In C/C++ even scalar trigonometric operations like sin( x) or string concatenation are NOT part of the language.
The language itself defines:
a) syntax
b) basic arithmetic operators + precedence working on primitive types only (scalar integer and/or float)
c) flow control (conditional execution, loops)
d) structural concepts (variables/functions/procedures/structures/objects)
e) some miscellaneous stuff like run-time type info, exception handling etc.
And that's it.
Anything more is supplied by LIBRARIES. In C there is a library for basic string manipulation (such as concatenation
- strcat) or floating point. The same with any high-level stuff like matrices - this is the area which
is implemented by EXTERNAL libraries (not part of the language).
Libraries in AFL can be provided by:
a) #include - the AFL code implementing features via functions
b) AmiBroker Development Kit - allowing to write extensions (functions) as a DLL in any compiled language.
c) JScript/VBScript
d) any external COM object http://www.amibroker.com/guide/a_aflcom.html
This covers any imaginable application and any imaginable need you may have.
Having said that, for anyone needing multiple dimensional arrays in AFL there are several options:
a) use VarGet/VarSet (the 2-dim array is simply array of the array, so for N:M 2-dim array you need N AFL arrays)
b) using embedded JScript parts with AFL
c) using free open source Osaka plugin (you can extend it to your needs since all sources are available)
d) using any external COM object (written in VB for example if you need that)
If anyone is "advanced enough" to need multiple dimensional arrays, it is also "advanced enough" to use these options
without any trouble.
Also with regards to:
> - some of the architecture of AB is quirky also e.g. essentially it is a database, at the binary level, but you can't write
> directly to the native database
That is entirely not true.
The database is exposed in two ways:
First (more general)
full OLE read/write direct access to the database - see Stocks/Stock/Quotations/Quotation objects:
http://www.amibroker.com/guide/objects.html
- and this OLE interface is DIRECTLY available from AFL level.
Second (easier)
AddToComposite/Foreign - gives you easy to use way to STORE and READ from the AmiBroker database.
Best regards,
Tomasz Janeczko
amibroker.com |
|
Последний раз редактировалось: fujis84 (Вс Мар 29, 2015 5:38 am), всего редактировалось 1 раз |
|
Посмотреть профиль Отправить личное сообщение |
|
crn
Зарегистрирован: 28.03.2015
Сообщения: 30
|
а ты видимо еще хуже.
Черным по белому написано, что вся справка и примеры на АНГЛ. ЯЗЫКЕ.
Ссылки которые ты мне скинул я без твоих соплей давно все уже видел. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
crn
Зарегистрирован: 28.03.2015
Сообщения: 30
|
fujis84 писал(а): |
crn писал(а): |
Почему не объявляются переменные Cond1 Cond2 и почему у них нет типа? |
Код: |
Cond1 = Close > MA( Close, 3 );
Cond2 = Volume > Ref( Volume, -1 );
printf( "Type of Cond1:" + typeof( Cond1 ) );
printf( "\nType of Cond2:" + typeof( Cond2 ) ); |
или
Код: |
Cond1 = Close > MA( Close, 3 );
Cond2 = Volume > Ref( Volume, -1 );
_Trace( "!CLEAR!" );
_Trace( "Type of Cond1:" + typeof( Cond1 ) );
_Trace( "Type of Cond2:" + typeof( Cond2) ); |
|
И что? это пример того, как они объявляются по вашему?
То, что там динамическая типизация админ сайта мне уже указал. Не стило себя утруждать бесполезным примером. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Брейк, пацаны. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
nofx
Зарегистрирован: 27.09.2011
Сообщения: 33
|
|
Посмотреть профиль Отправить личное сообщение |
|
crn
Зарегистрирован: 28.03.2015
Сообщения: 30
|
|
Посмотреть профиль Отправить личное сообщение |
|
crn
Зарегистрирован: 28.03.2015
Сообщения: 30
|
Интересно, что в справке не указываются различные варианты перегрузок функций.
6 аргументов в справке:
SYNTAX Param( ''name'', defaultval, min, max, step, sincr = 0 )
RETURNS NUMBER
и сразу же, в этой же справке в качестве примера используют 5 аргументов:
Mn= Param("step", 2, 1,3, 0.1);
А в одном примере вообще видел 4 аргумента:
sp = Param( "MA Period", 12, 2, 100 ); |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Если параметр не указан, то используется дефолтный. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|