Fsharp Media Movel




Fsharp Média MóvelOs algoritmos podem subscrever manualmente os dados para ativos especificos de que necessitam ou usar universos para escolher grupos de ativos com base em criterios de filtragem (por exemplo, todos os estoques com volumes maiores que 10Mday). Veja mais sobre Universos aqui. Para subscrever manualmente um recurso especifico, voce pode chamar o AddEquity (). AddForex (). AddCfd () e AddOption () no seu metodo Initialize (). Voce pode assinar 500 datafeeds de resolucao de minutos, 100 segundos de feeds de resolucoes e 10 downloads de dados de resolucao de marcacoes. O QuantConnect suporta o comercio internacional em varios fusos horarios e mercados. Os mercados sao usados ??para distinguir entre os mesmos tickers em trocas diferentes (por exemplo, FXCM e Oanda ambos oferecem o EURUSD, mas tem taxas diferentes). QuantConnect fornece 40TB de US Equities, US Options, FXCM FX e Oanda FX dados. Confira mais informacoes sobre nossos dados em nossa biblioteca de dados. Nos fornecemos dados em tick, segundo, minutos, horas ou resolucoes diarias. Estes sao especificados pelo enum Resolucao. Se houver uma lacuna nos dados (por exemplo, porque nao ha operacoes), por padrao, os dados ainda sao bombeados para a estrategia em cada etapa de tempo. Esse comportamento e chamado fillForward e padrao para true. Voce pode desativar isso definindo fillForward como false. Por padrao, os dados no QuantConnect sao Split e Dividend ajustados para tras no tempo para oferecer precos continuos e continuos. Isso permite facil utilizacao para indicadores. Alguns algoritmos precisam de dados de precos brutos ou parcialmente ajustados. Voce pode controlar isso com o metodo SetDataNormalizationMode (). O enum DataNormalizationMode tem os valores ajustados (padrao), Raw, SplitAdjusted e TotalReturn. Se voce tem seus proprios dados personalizados que voce gostaria de backtest contra, confira a secao de dados personalizados. Definicao do periodo de aquecimento Frequentemente, os algoritmos necessitam de alguns dados historicos para indicar indicadores tecnicos ou preencher matrizes de dados historicos. Usando o SetWarmUp (TimeSpan periodo) ou SetWarmUp (int barCount) metodos voce pode especificar um periodo de aquecimento para o seu algoritmo que os dados de bomba de antes da data de inicio. Durante o periodo de aquecimento voce nao pode colocar um comercio. Algoritmos podem usar a propriedade bool IsWarmingUp para determinar se o periodo de aquecimento foi concluido. Veja mais sobre o uso de dados historicos na secao Historico. Modelos de caixa e corretagem As contas de corretagem de acoes dos Estados Unidos sao contas com base em caixa ou com base em margem. As contas de caixa nao permitem a negociacao com alavancagem, enquanto as contas de margem suportam uma alavancagem de 2-4x no valor da sua conta. Voce pode definir seu tipo de conta de corretagem em sua inicializacao com SetBrokerageModel (BrokerageName broker, Conta AccountType). O enum BrokerageName suporta valores de Padrao, TradierBrokerage, InteractiveBrokersBrokerage, FxcmBrokerage e OandaBrokerage. Ao definir o nome da corretora tambem definimos as estruturas de taxa de negociacao para essa corretora. O enum AccountType suporta valores de caixa e margem. Quando o uso de alavancagem de caixa e desativado por padrao, eo periodo de liquidacao de caixa e definido como 3 dias. Margem contas sao liquidadas imediatamente e ter uma alavancagem de 2. Margem contas com mais de 25.000 em capital sao elegiveis para o padrao day trading margem limites. Isso aumenta sua alavancagem disponivel para 4x enquanto o mercado esta aberto e 2x durante a noite. Para modelar esse comportamento em seu algoritmo, voce deve definir seu MarginModel de seguranca como uma classe PatternDayTradingMarginModel. Veja mais sobre modelos de corretagem na secao Modelagem de Realidade. Tratamento de dados Os dados solicitados sao passados ??para manipuladores de eventos para serem usados ??para tomar decisoes de negociacao. O manipulador de eventos primario, Slice, agrupa todos os tipos de dados em um unico momento no manipulador OnData (Slice data). O Slice e curto para a fatia de tempo - representando uma fatia de tempo e valores dos dados naquele momento. C e F tambem permitem que voce receba dados com manipuladores de eventos dedicados para cada tipo de dados, por exemplo, OnData (dados de TradeBars). O Python suporta somente os manipuladores de eventos Slice. Todos os dados usam objetos DataDictionary para agrupar dados por simbolo e fornecem acesso facil as informacoes. O plural do tipo denota a coleci??o de objectos, e. O TradeBars DataDictionary e composto de objetos TradeBar. Voce pode acessar pontos de dados individuais no dicionario atraves de seu indice de dicionario de cadeia ou simbolo. Por exemplo var ibmTradeBar tradebarsIBM. Time Slices O manipulador de eventos Slice combina todos os dados juntos em um unico metodo. Ele representa os dados em um ponto no tempo. O objeto Slice contem muitos auxiliares para acessar seus dados. Os objetos Slice chegam ao manipulador de eventos OnData (Slice data). O objeto Slice permite o acesso direto atraves de propriedades fortemente digitado, um dinamico stringsymbol indexador eo metodo DataDictionaryltTgt GetltTgt fortemente digitado. Acesso fortemente digitado da-lhe tempo de compilacao de seguranca, mas tipos dinamicos as vezes pode simplificar a codificacao. O Python e dinamicamente digitado, portanto nao tem o metodo Get. Primary Slice acessar dados e atraves do stringsymbol indexador. Slice e o metodo recomendado para acesso a dados em seu algoritmo. O LEAN suporta backtesting quase qualquer fonte de dados personalizada externa. Para usar esse recurso, voce precisa adicionar os dados durante a inicializacao usando AddDataltTgt () e instruir seu algoritmo como ler seus dados. Nos fornecemos ajudantes para fontes de dados populares como Quandl, mas se voce estiver usando seu proprio servidor de formato voce precisara criar um tipo personalizado. Inicializando Dados Personalizados Durante a inicializacao seu algoritmo deve usar AddDataltTgt (string ticker, Resolution resolution Resolution. Daily). Isso da LEAN a fabrica de tipo T para criar os objetos, o nome dos dados e a resolucao na qual pesquisar os dados para verificar se ha atualizacoes. A estrutura verifica novos dados de acordo com as instrucoes do periodo da Resolucao, isto e, Resolva. Proveja votacoes constantemente, Resolve. Secundas pesquisas a cada segundo e Resolucao. Minute a cada minuto. Resolucoes diarias e por hora sao consultadas a cada 30 minutos para evitar saltar um dia se os dados foram emitidos tarde. Criando e lendo dados personalizados Voce deve criar um tipo personalizado para instruir o LEAN onde obter seus dados e como le-lo. Suportamos muitos tipos de dados e formatos diferentes. Voce pode ate alterar os locais de origem para os modos de backtesting e live. Todos os dados devem se estender de BaseData e substituir os metodos Reader e GetSource. GetSource instrui LEAN onde encontrar seus dados. Ele deve retornar um objeto SubscriptionDataSource contendo a string Url para localizar seus dados eo formato dos dados (SubscriptionTransportMedium RemoteFile ou Rest). Quando a fonte retornada muda de URL os dados sao baixados novamente. Isso permite que o LEAN armazene em cache arquivos grandes e baixe apenas novos dados quando solicitado. Isso tambem permite dividir grandes dados intraday em pequenos arquivos diarios, acelerando o backtest. Ao usar SubscriptionTransportMedium. Rest, o url fornecido e consultado em cada etapa de tempo de resolucao e e considerado suficiente para 1 ponto de dados. Geralmente, ele e destinado a fontes de dados ao vivo. O leitor toma uma linha de dados fornecida pela origem e analisa-a num dos seus objectos personalizados (por exemplo, Yahoo no fragmento de codigo). Alem de definir suas propriedades de tipo personalizado, voce tambem deve ter o cuidado de definir tres propriedades necessarias: Simbolo - Deve sempre ser configurado para config. Symbol Time - Sincronizacao necessaria de dados personalizados Valor - Necessario para compras e calculos de carteira Quando nao houver nenhum utilizavel Dados em uma linha, seu tipo deve retornar nulo. Os Valores Mobiliarios e os Algoritmos de Carteira possuem uma propriedade de Valores Mobiliarios que armazena um objeto de Seguranca para cada ativo em seu algoritmo. Os objetos de seguranca mantem os modelos (comportamentos de backtesting) e as propriedades de um recurso. Cada seguranca pode ser completamente personalizada para se comportar como o youd gosta. Securities e um DictionaryltSymbol, Securitygt para que voce possa acessar seus objetos de seguranca com seu ticker SecuritiesIBM. Price. Objetos de seguranca tambem carregam todos os modelos para criar backtests realistas. Estes modelos sao definidos atraves das propriedades de seguranca publica e, em seguida, utilizado em LEAN para melhorar o seu realismo backtest. A propriedade Portfolio e uma colecao de objetos SecurityHolding para fornecer acesso facil as propriedades de retencao. A classe Portfolio e um DictionaryltSymbol, SecurityHoldinggt, pelo que pode ser acessado atraves do indice ticker: PortfolioIBM. IsLong Informacoes detalhadas sobre essas classes podem ser encontradas na documentacao LEAN. Confira as classes Classe de seguranca (objetos de Titulos) e SecurityHolding (objetos de portfolio). Trading and Orders Conceitos-chave Algoritmos podem fazer um pedido atraves da chamada do metodo apropriado na API. Indo longo e denotado com um numero positivo ordem, e curto um negativo. A LEAN nao suporta cobertura (longa e curta ao mesmo tempo). A colocacao de um pedido gera um OrderTicket que voce pode usar para atualizar, cancelar ou verificar o status de seu pedido. Para atualizar um pedido pode chamar o metodo Update no OrderTicket. O metodo Update usa um objeto UpdateOrderFields que define quais propriedades da ordem devem ser atualizadas. Da mesma forma, voce pode cancelar sua encomenda com o metodo Cancelar Pedido por Ordem. A propriedade OrderTicket Status pode ser usada para determinar se a ordem esta preenchida. O Enum OrderStatus tem os valores submetidos, PartiallyFilled, preenchido, cancelado ou invalido. Set Holdings Helper Muitas vezes algoritmos baseados em carteira quer definir a carteira com base na ponderacao percentual. Nos fornecemos um metodo auxiliar para executar esta ponderacao para voce chamado SetHoldings. Quando as propriedades existentes sao liquidadas, todas as participacoes existentes serao vendidas. Isso pode ser util quando voce esta reequilibrio para um novo conjunto de acoes. O metodo Liquidate pode atingir o mesmo efeito. Liquidate vende todas as participacoes em seu portfolio, ou apenas o simbolo ticker se o parametro e especificado. SetHoldings define uma fracao de capital nao alavancado. por exemplo. Se voce tiver 2x alavancagem disponivel e SetHoldings para 1.0 o algoritmo usara 1.0 do seu poder de compra disponivel. Para maximizar o poder de compra neste caso voce faria as fracoes SetHoldings total 2.0. Muitas vezes voce pode querer rodar titulos em seu algoritmo com base em criterios de filtro. Voce pode somente querer equidades acima de seus 200 dias EMA, ou seguir somente estoques em sua lista feita sob encomenda de simbolos. Isso e possivel usando nossa API de selecao de universo. Universos sao como LEAN organiza colecoes de assinaturas de dados sob o capo. Cada seguranca e seus dados sao controlados por um universo. Quando nenhum universo esta solicitando dados, o recurso e removido do seu algoritmo. Se o algoritmo tiver ordens abertas ou participacoes em uma seguranca, nao a removeremos de suas assinaturas. Cada algoritmo tem um universo oculto definido pelo usuario. Os recursos neste universo sao definidos pelos metodos AddFext AddEquity. Esses recursos sao fixos e nunca sao removidos de seu algoritmo. Os universos sao atualizados diariamente por padrao, mas podem ser atualizados sempre que necessario. Isso e controlado na variavel algorithm. UniverseSettings que bem descrever em mais detalhes abaixo. API Universo Basico Adicionar Universos Os universos sao adicionados usando a API do metodo AddUniverse (). Eles sao um tipo de assinatura de dados que controlam quais assinaturas sao solicitadas e, como tal, voce pode criar tipos de dados de universo personalizados. Dependendo do tipo de universo que voce esta adicionando ha muitos metodos auxiliares para torna-lo mais facil. AddUniverse () metodos tomar filtros funcao como parametros, esses filtros devem retornar um enumeravel de objetos Symbol. Configuracoes de Universo Se voce nao passar em um objeto de universo completo, a propriedade UniverseSettings sera usada para preencher os espacos em branco. Alterar a propriedade UniverseSettings algoritmo pode ser util para simplificar a adicao de universos. Os universos possuem 4 propriedades-chave: Uma vez que os universos adicionados sao armazenados no IDictionaryltstring, Universegt UniverseManager. Eventos Universais Quando os conteudos do universo sao alterados (os titulos sao adicionados ou removidos do algoritmo) geramos um evento OnSecuritiesChanged. Isso permite que seu algoritmo conheca as mudancas no estado do universo. O evento passa no objeto SecurityChanges contendo referencias aos titulos Adicionado e Removido. Coarse Universe Selecao Coarse Universe selecao e o construido em dados do universo fornecido pela QuantConnect. Usando dados financeiros, geramos algumas propriedades de chave para cada simbolo e permitimos que voce filtre o universo de 16.400 simbolos para receber os simbolos correspondentes aos criterios de filtro. Ele usa o tipo CoarseFundamental. Coarse fundamental tem as seguintes propriedades que voce pode usar para executar filtragem aspera. Filtragem grosseira permite que voce selecione um universo ilimitado de simbolos para analisar. Voce esta limitado apenas pela memoria pratica e limites de velocidade e pode rapidamente ficar sem memoria se voce backtest muitos simbolos em paralelo. Esses limites podem ser aumentados com uma assinatura. Selecao de Universo Personalizado Universos personalizados permitem usar uma fonte de dados externa como a fonte de filtragem de seguranca. Como fontes de dados personalizadas normais, universos personalizados sao fornecidos estendendo BaseData. Com este sistema voce pode definir formatos de dados para filtrar e selecionar os dados. Cada BaseData do universo personalizado e 1 linha do arquivo de origem. O metodo Reader sera chamado repetidamente ate que o datetime avance ou o final do arquivo seja alcancado. Desta forma, o motor pode agrupar dados de universo juntos e passa-lo como uma unica colecao para a funcao de filtro. Modelos podem ser usados ??para melhorar a precisao de seu backtesting. Nos fornecemos modelos basicos que assumem que voce esta negociando em ativos altamente liquidos, mas se voce esta negociando grandes volumes, ou em ativos de baixo volume voce deve atualizar esses modelos para ser mais realista. Todos os modelos sao definidos em uma base de seguranca. Para definir um modelo, primeiro busque o objeto de seguranca e aplique seu modelo. Todos os modelos devem ser configurados no seu metodo Initialize (). Modelos de corretagem Nos fornecemos um atalho para definir modelos comuns e propriedades relacionadas a cada uma das corretoras que apoiamos. Estes modelos de corretagem fixam taxas, modelos de preenchimento, modelos de derrapagem e mercados de negociacao para uma corretora. Alem disso, eles validam e possivel submeter negociacoes para a corretora (por exemplo, submeter transacoes de capital a uma corretora apenas forex). Modelos de taxas de transacao Mercados suportados Modelo de deslizamento Validar ordens e atualizacoes antes de serem enviadas Tipo de conta padrao (margem ou conta de caixa) Suporte para horarios de mercado prolongados Como os splits e os dividendos sao aplicados aos tickets de ordem aberta Alavancagem padrao para ativos Modelos de liquidacao padrao Controle sobre o comportamento de seu algoritmo e permitem modelar praticamente qualquer corretora no mundo. Modelos de mercado substituem qualquer outro modelo que voce pode definir para uma seguranca. Modelos de taxa de transacao Os modelos de taxa de transacao definem as taxas de cada pedido. Nos fornecemos modelos de transacao personalizados para todas as corretoras, mas voce tambem pode definir seus proprios. Como todos os modelos, eles devem ser definidos em uma seguranca por seguranca. Os modelos de transacao implementam a interface ISecurityTransactionModel. Se voce deseja implementar seu proprio modelo de transacao, voce pode comecar com o SecurityTransactionModel e substituir os metodos que voce deseja alterar. Slippage Models Slippage e a diferenca de preco entre a sua ultima citacao relatada eo preco real do comercio preenchido. Esta diferenca e ser positivo ou negativo, como as vezes o preco pode escorregar em seu favor. Em mercados volateis voce e provavel experimentar mais derrapagem. Os modelos de deslizamento implementam a interface ISlippageModel. Nos fornecemos o SpreadSlippageModel para valores mobiliarios forex, eo ConstantSlippageModel para Equities. Os usuarios avancados podem desejar implementar seu proprio modelo de derrapagem baseado em volatilidade - aumentando a precisao de seus backtests em mercados volateis. Modelos de enchimento Os modelos de preenchimento fornecem controle sobre preenchimentos de pedidos. Cada tipo de ordem suportado e passado atraves de um metodo dedicado e retorna um objeto OrderEvent. OrderEvents sao usados ??para transportar informacoes sobre pedidos de preenchimentos parciais ou erros. Os modelos de preenchimento implementam a interface IFillModel. Eles tem os seguintes metodos principais: Nos fornecemos o ImmediateFillModel que assume ordens e imediatamente e completamente preenchido. Modelos de margem Os modelos de margem controlam quanto poder de compra seu algoritmo tem para fazer negocios. Margem calculos podem ser muito complexos e depende de muitos fatores, incluindo a corretora ou mesmo a hora do dia. Modelo de margem implementar a interface ISecurityMarginModel e padrao para a classe SecurityMarginModel. Nos tambem fornecemos o PatternDayTradingMarginModel para modelar dia intraday dia negociacao para acoes dos EUA. Modelos de liquidacao Depois de um comercio e feita corretoras liquidar o dinheiro, dependendo dos mercados e tipo de conta. Isso e gerenciado por nossos Modelos de Liquidacao. O tipo de liquidacao mais comum e imediato - onde os fundos estao disponiveis para negociacao imediatamente. Isso e tratado pelo ImmediateSettlementModel. A negociacao de acoes norte-americanas com contas de caixa e normalmente liquidada 3 dias apos a transacao ocorrer. Isso e gerenciado pelo DelayedSettlementModel. Os modelos de liquidacao implementam a interface ISettlementModel. Voce pode criar seu proprio modelo de liquidacao implementando esse metodo. A maioria dos usuarios nao precisara criar seu proprio modelo de liquidacao e pode usar um dos fornecidos acima. Modelos de portfolio Os modelos de portfolio controlam como os preenchimentos de pedidos sao aplicados ao portfolio. Eles tomam um OrderEvent. Security e SecurityPortfolioManager e atualizar as participacoes para refletir a nova posicao final. Voce so precisara atualizar seu modelo de portfolio quando criar um novo tipo de recurso. Os modelos de portfolio implementam a interface ISecurityPortfolioModel. Modelo de volatilidade O modelo de volatilidade e uma propriedade de um titulo. Exatamente como a volatilidade e calculada varia muito entre as estrategias assim que weve forneceu um ponto do override aqui. Os modelos de volatilidade sao atualizados com os dados a cada passo e devem ser atualizados imediatamente. Isso e principalmente necessario para backtesting opcoes. Os modelos de volatilidade implementam a interface IVolatilityModel. Nos padrao para o NullVolatilityModel que retorna 0 volatilidade em todos os momentos. Como auxiliar, tambem fornecemos o RelativeStandardDeviationVolatilityModel que calcula a volatilidade com base no desvio padrao. Nos fornecemos uma API de graficos poderosa que pode ser construir muitos tipos de grafico. No seu mais simples pode ser usado com uma unica linha de codigo: Com este codigo um grafico de linha e adicionado debaixo do seu grafico de Equidade de Estrategia e seus valores solicitados sao exibidos ao longo do tempo. Para criar um novo grafico (nova guia), voce tambem deve especificar o nome do grafico em sua solicitacao: Nos bastidores, esses metodos criam um novo objeto Chart e adicionam-no ao seu algoritmo e, em seguida, adicionam um novo objeto Series a esse grafico. Um grafico e feito de muitas series. Voce tambem pode inicializar seus graficos manualmente para obter mais controle sobre sua aparencia. Criando graficos manualmente No metodo initialize, voce pode usar o metodo AddChart (Chart obj) para inserir um novo grafico. Cada objeto grafico tem uma colecao interna de objetos Series. Ao criar objetos Series voce deve especificar o nome da serie, o SeriesType eo indice em que a serie opera. O indice serie refere-se a sua posicao no grafico - por exemplo, se todas as series sao o indice 0, eles vao colocar em cima uns dos outros. Se cada serie tem seu proprio indice, ele tera varios mini-graficos pilha ao lado do outro. A imagem abaixo mostra um grafico EMA cruzado com ambas as series EMA definido para o mesmo indice: Usando diferentes indices o grafico parece o seguinte: Algoritmos podem salvar mensagens mais detalhadas para arquivos de log para posterior analise usando Log (string message). No final do backtest um link sera apresentado para ver seus resultados. Na negociacao ao vivo, um visualizador de log permite visualizar os resultados do registro enquanto o algoritmo esta sendo executado. Devido as limitacoes do fornecedor de dados, as informacoes sobre precos nao podem ser registradas nos logs. Devido as limitacoes dos fornecedores, os usuarios livres sao limitados a 10kb de logs por backtest, com um maximo de 3Mb por dia. Os usuarios com uma assinatura podem gerar ate 100kb de logs por backtest. Negociacao ao Vivo Corretoras Suportadas Corretoras Suportadas Algoritmos desenvolvidos no QuantConnect podem ser negociados diretamente em suas contas de corretagem. Enviamos os sinais de algoritmo para sua corretora e rastreamos o estado do algoritmo. Algoritmos podem ser implantados imediatamente a qualquer hora do dia ou da noite. Uma subscricao e necessaria para a negociacao ao vivo, porem muitas corretoras patrocinam a negociacao ao vivo para seus clientes. FXCM e um corretor de acesso direto ao mercado (DMA) oferecendo spreads baixos e taxas de corretagem tao baixas quanto 0,04 por lado para moedas populares. FXCM negociacao esta disponivel para usuarios de todo o mundo e as contas podem ser abertas com como 50 USD. A negociacao ao vivo e gratuita para clientes FXCM. Interactive Brokers (IB) e um provedor de baixo custo de execucao comercial e servicos de compensacao para individuos, consultores, grupos de negociacao de prop, corretores e hedge funds. A primeira tecnologia da IBs oferece acesso direto a acoes, opcoes, futuros, forex, titulos e fundos em mais de 100 mercados em todo o mundo a partir de uma unica conta do IB Universal. Membro NYSE, FINRA, SIPC. Subscricao necessaria para negociacao ao vivo. Atraves da nossa integracao com a Oanda Brokerage, podemos oferecer FOREX ou CFD para usuarios em todo o mundo. As contas podem ser abertas com tao pouco quanto 1 USD. Subscricao necessaria para negociacao ao vivo. Paper Trading US Equity, Forex Veja como o seu algoritmo teria realizado com o nosso papel comercial recurso. Usamos feeds de dados reais, mas uma corretora virtual para executar seus negocios. Cada projeto e alocado 100.000 moeda virtual para rastrear como youve executado. Suportamos totalmente C com documentacao e tutoriais. Nos tambem oferecemos suporte beta para Python, F, Visual Basic e Java. Quais sao as corretoras que voce apoia Atualmente, apoiamos a negociacao ao vivo por meio de quatro corretoras. Interactive Brokers. Tradier. FXCM e Oanda. Nos tambem apoiamos a negociacao de papel (testando seu algoritmo em moeda virtual.) Quais bibliotecas estao listadas para uso em QuantConnect As seguintes bibliotecas estao disponiveis em C. Se voce tem uma biblioteca que voce deseja adicionar, por favor, avise - nos (supportquantconnect). Aprendizagem, Matematica, Neuro, Estatistica, Matematica, Neuro, AlgoLib - Indicador Tecnico Completo e Biblioteca de Estatistica Filtragem de Matematica - Classes de Processamento de Sinal Matematica Numerica - Estatistica e Algebra Linear Newtonsoft Json - JSON Serializer RestSharp - REST Wrapper Quais os conjuntos de dados que voce tem Temos todos os dados das acoes dos EUA equidade desde 1998, incluindo dividendos e divisoes de acoes incorporadas no preco. Estes dados sao fornecidos pela QuantQuote. Temos tambem 13 principais moedas fornecidas pela FXCM. Por favor, veja mais informacoes nos dados Biblioteca Eu nao posso codigo, voce tem um editor visual para projetar algoritmos Nos nao temos quaisquer planos para construir um designer de algoritmo visual Nos acreditamos que a unica maneira de ganhar dinheiro na marca Ets e com as ferramentas mais poderosas e flexiveis disponiveis. Sua crenca que tem alimentado muitas das decisoes de design por tras de QuantConnect. Fomos comerciantes algoritmicos nos mesmos por varios anos e construiu centenas de algoritmos. Eles variaram do simples, para incrivelmente complexo. O tema comum entre eles foi a necessidade de flexibilidade que so pode ser alcancada atraves de codigo bruto. Como faco para comecar a aprendizagem de negociacao algoritmica ou financas quantitativas Aprender a negociacao quantitativa e especialmente dificil, pois ha tao pouca informacao publica disponivel. Temos procurado resolver este problema atraves da construcao da QuantConnect University (QCU). A universidade e uma serie de video que os passos voce atraves de como codificar um novo algoritmo a cada semana. Voce pode acessar a QuantConnect University dentro do Algorithm Terminal, clicando no icone do escudo no lado esquerdo. Exemplo AlgorithmsF - Guia Rapido F - Visao Geral F e uma linguagem de programacao funcional. Para entender construcoes F, voce precisa ler algumas linhas sobre o paradigma de programacao chamado Programacao Funcional. A programacao funcional trata programas de computador como funcoes matematicas. Na programacao funcional, o foco seria em constantes e funcoes, em vez de variaveis ??e estados. Porque as funcoes e as constantes sao coisas que nao mudam. Na programacao funcional, voce vai escrever programas modulares, isto e, os programas consistiriam de funcoes que terao outras funcoes como entrada. Programas escritos em linguagem de programacao funcional tendem a ser conciso. A seguir estao as informacoes basicas sobre F minus Foi desenvolvido em 2005 na Microsoft Research. E uma parte da familia Microsofts da linguagem. E uma linguagem de programacao funcional. E baseado na linguagem de programacao funcional OCaml. Caracteristicas de F E implementacao do OCaml. Ele compila CLI (Common Language Interface) byte codigo ou MSIL (Microsoft Intermediate Language) que e executado em CLR (Common Language Runtime). Ele fornece inferencia de tipo. Ele fornece construcoes ricas de correspondencia de padroes. Possui recursos interativos de scripts e depuracao. Permite escrever funcoes de ordem superior. Ele fornece modelo de objeto bem desenvolvido. F e normalmente usado nas seguintes areas minus Fazer modelo cientifico Resolucao de problemas matematicos Trabalho de pesquisa de inteligencia artificial Modelagem financeira Design grafico Design de CPU Programacao de compilador Telecomunicacoes Tambem e usado em aplicativos CRUD, paginas da web, jogos GUI e outros programas de proposito geral. F - Configuracao do Ambiente As ferramentas necessarias para a programacao F sao discutidas neste capitulo. Ambiente de Desenvolvimento Integrado (IDE) para F A Microsoft fornece o Visual Studio 2013 para programacao F. O Visual Studio 2013 Community Edition gratuito esta disponivel no site oficial da Microsofts. Visual Studio 2013 Comunidade e acima vem com o Visual F Tools. O Visual F Tools incluem o compilador de linha de comando (fsc. exe) e F Interactive (fsi. exe). Usando essas ferramentas, voce pode escrever todos os tipos de programas F, desde simples aplicativos de linha de comando ate aplicativos mais complexos. Voce tambem pode gravar arquivos de codigo-fonte F usando um editor de texto basico, como o Bloco de Notas, e compilar o codigo em assemblies usando o compilador de linha de comando. Voce pode baixa-lo do Microsoft Visual Studio. Ele e instalado automaticamente em sua maquina. Escrevendo F Programas Sobre Links Visite o site oficial F para obter as instrucoes mais recentes sobre como obter as ferramentas como um pacote Debian ou compila-las diretamente da fonte menos fsharp. orguselinux. Experimente Opcao Online Criamos o ambiente de Programacao F online. Voce pode facilmente compilar e executar todos os exemplos disponiveis on-line junto com fazer o seu trabalho teorico. Da-lhe confianca no que voce esta lendo e para verificar o resultado com opcoes diferentes. Sinta-se livre para modificar qualquer exemplo e executa-lo on-line. Experimente o exemplo a seguir usando a opcao Try it ou use o url menos wwwpileonline. Para a maioria dos exemplos apresentados neste tutorial, voce encontrara uma opcao Experimente em nossas secoes de codigo do site no canto superior direito que o levara ao compilador on-line. Entao, basta fazer uso dele e desfrutar de sua aprendizagem. F - Estrutura do Programa F e uma linguagem de programacao funcional. Em F, as funcoes funcionam como tipos de dados. Voce pode declarar e usar uma funcao da mesma maneira como qualquer outra variavel. Em geral, um aplicativo F nao tem qualquer ponto de entrada especifico. O compilador executa todas as instrucoes de nivel superior no arquivo de cima para baixo. No entanto, para seguir o estilo de programacao procedural, muitas aplicacoes mantem uma unica instrucao de nivel superior que chama o loop principal. O codigo a seguir mostra um simples programa F menos Quando voce compila e executa o programa, ele produz a seguinte saida menos Observe que menos Um arquivo de codigo F pode comecar com um numero de instrucoes abertas que e usado para importar namespaces. O corpo dos arquivos inclui outras funcoes que implementam a logica de negocios do aplicativo. O loop principal contem as principais instrucoes executaveis. F - Sintaxe Basica Voce ja viu a estrutura basica de um programa F, entao sera facil entender outros blocos de construcao basicos da linguagem de programacao F. Tokens in F Um programa F consiste em varios tokens. Um token pode ser uma palavra-chave, um identificador, uma constante, um literal de cadeia ou um simbolo. Podemos categorizar tokens F em dois tipos menos F Palavras-chave A tabela a seguir mostra as palavras-chave e descricoes breves das palavras-chave. Discutiremos o uso dessas palavras-chave em capitulos subsequentes. Comentarios em F F fornece dois tipos de comentarios menos Um comentario de linha comeca com simbolo. O comentario de linha multipla comeca com (e termina com). Um Programa Basico e um Ponto de Entrada de Aplicacao em F Geralmente, voce nao tem nenhum ponto de entrada explicito para programas F. Quando voce compila um aplicativo F, o ultimo arquivo fornecido ao compilador se torna o ponto de entrada e todas as instrucoes de nivel superior nesse arquivo sao executadas de cima para baixo. Um programa bem escrito deve ter uma unica declaracao de nivel superior que chamaria o loop principal do programa. Um programa F muito minimalista que exibe Hello World na tela menos Quando voce compila e executa o programa, ele produz a seguinte saida menos F - Tipos de dados Os tipos de dados em F podem ser classificados da seguinte forma menos Tipos integrados Tipos de pontos flutuantes Tipos de texto Outros tipos Tipo de dados integral A tabela a seguir fornece os tipos de dados inteiros de F. Esses sao basicamente tipos de dados inteiros. Quando voce compila e executa o programa, ele produz a seguinte saida menos F - Variaveis ??Uma variavel e um nome dado a uma area de armazenamento que nossos programas podem manipular. Cada variavel tem um tipo especifico, que determina o tamanho eo layout das variaveis ??memoria o intervalo de valores que podem ser armazenados dentro dessa memoria eo conjunto de operacoes que podem ser aplicadas a variavel. Declaracao de variavel em F A palavra-chave let e usada para a declaracao de variavel minus Ela declara uma variavel x e atribui o valor 10 a ela. Voce tambem pode atribuir uma expressao a uma variavel menos O exemplo a seguir ilustra o conceito menos Quando voce compila e executa o programa, produz a seguinte saida menos As variaveis ??em F sao imutaveis, o que significa que uma vez que uma variavel esta vinculada a um valor, nao pode ser alterado. Eles sao realmente compilados como propriedades estaticas somente leitura. O exemplo a seguir demonstra isso. Quando voce compila e executa o programa, ele mostra a seguinte mensagem de erro menos Definicao de variavel com declaracao de tipo Uma definicao de variavel informa ao compilador onde e quanto armazenamento para a variavel deve ser criado. Uma definicao de variavel pode especificar um tipo de dados e contem uma lista de uma ou mais variaveis ??desse tipo, conforme mostrado no exemplo a seguir. Quando voce compila e executa o programa, ele mostra a seguinte mensagem de erro menos Variaveis ??mutaveis ??As vezes voce precisa alterar os valores armazenados em uma variavel. Para especificar que poderia haver uma alteracao no valor de uma variavel declarada e atribuida, na parte posterior de um programa, F fornece a palavra-chave mutavel. Voce pode declarar e atribuir variaveis ??mutaveis ??usando esta palavra-chave, cujos valores voce mudara. A palavra-chave mutable permite que voce declare e atribua valores em uma variavel mutable. Voce pode atribuir algum valor inicial a uma variavel mutavel usando a palavra-chave let. However, to assign new subsequent value to it, you need to use the larr operator. The following example will clear the concept minus When you compile and execute the program, it yields the following output minus F - Operators An operator is a symbol that tells the compiler to perform specific mathematical or logical manipulations. F is rich in built-in operators and provides the following types of operators minus Arithmetic Operators Comparison Operators Boolean Operators Bitwise Operators Arithmetic Operators The following table shows all the arithmetic operators supported by F language. Assume variable A holds 10 and variable B holds 20 then minus When you compile and execute the program, it yields the following output minus F - Decision Making Decision making structures require that the programmer specify one or more conditions to be evaluated or tested by the program. It should be along with a statement or statements to be executed if the condition is determined to be true, and optionally, other statements to be executed if the condition is determined to be false. Following is the general form of a typical decision making structure found in most of the programming languages minus F programming language provides the following types of decision making statements. if then statement An ifthen statement consists of a Boolean expression followed by one or more statements. ifthen else statement An ifthen statement can be followed by an optional else statement, which executes when the Boolean expression is false. An ifthenelifelse statement allows you to have multiple else branches. nested if statements You can use one if or else if statement inside another if or else if statement(s). F-ifthen Statement An ifthen statement consists of a Boolean expression followed by one or more statements. The ifthen construct in F has the following syntax minus Flow diagram When you compile and execute the program, it yields the following output minus F-ifthenelse Statement An ifthen statement can be followed by an optional else statement, which executes when the Boolean expression is false. The syntax of an ifthenelse statement in F programming language is minus Flow Diagram When you compile and execute the program, it yields the following output minus F-ifthenelifelse Statement An ifthenelifelse construct has multiple else branches. The syntax of an ifthenelifelse statement in F programming language is minus When you compile and execute the program, it yields the following output minus F-Nested if Statements It is always legal in F programming to nest ifthen or ifthenelse statements, which means you can use one if or else if statement inside another if or else if statement(s). When you compile and execute the program, it yields the following output minus F - Loops Programming languages provide various control structures that allow for more complicated execution paths. A loop statement allows us to execute a statement or group of statements multiple times and following is the general form of a loop statement in most of the programming languages minus F provides the following types of loops to handle the looping requirements. for to and for downto expressions The for. to expression is used to iterate in a loop over a range of values of a loop variable. The for downto expression reduces the value of loop variable. for in expression This form of for loop is used to iterate over collections of items i. e. loops over collections and sequences Repeats a statement or group of statements while a given condition is true. It tests the condition before executing the loop body. You can use one or more loop inside any other for or while loop. F-for. to and for. downto Expressions A for loop is a repetition control structure that allows you to efficiently write a loop that needs to execute a specific number of times. The syntax of a forto loop in F programming language is minus The syntax of a fordownto loop in F programming language is minus The following program prints out the numbers 1 - 20 minus When you compile and execute the program, it yields the following output minus The following program counts in reverse and prints out the numbers 20 - 1 minus When you compile and execute the program, it yields the following output minus F-for. in Expressions This looping construct is used to iterate over the matches of a pattern in an enumerable collection such as a range expression, sequence, list, array, or other construct that supports enumeration. The following program illustrates the concept minus When you compile and execute the program, it yields the following output minus F-Whiledo Expressions The while. do expression is used to perform iterative execution while a specified test condition is true. The test-expression is evaluated first if it is true, the body-expression is executed and the test expression is evaluated again. The body-expression must have type unit, i. e. it should not return any value. If the test expression is false, the iteration ends. When you compile and execute the program, it yields the following output minus F-Nested Loops F programming language allows to use one loop inside another loop. The syntax for a nested for loop statement could be as follows minus The syntax for a nested while loop statement could be as follows minus When you compile and execute the program, it yields the following output minus F - Functions In F, functions work like data types. You can declare and use a function in the same way like any other variable. Since functions can be used like any other variables, you can minus Create a function, with a name and associate that name with a type. Assign it a value. Perform some calculation on that value. Pass it as a parameter to another function or sub-routine. Return a function as the result of another function. Defining a Function Functions are defined by using the let keyword. A function definition has the following syntax minus function-name is an identifier that represents the function. parameter-list gives the list of parameters separated by spaces. You can also specify an explicit type for each parameter and if not specified compiler tends to deduce it from the function body (like variables). function-body consists of an expression, or a compound expression consisting of a number of expressions. The final expression in the function body is the return value. return-type is a colon followed by a type and is optional. If the return type is not specified, then the compiler determines it from the final expression in the function body. Parameters of a Function You list the names of parameters right after the function name. You can specify the type of a parameter. The type of the parameter should follow the name of the parameter separated by a colon. If no parameter type is specified, it is inferred by the compiler. For example minus Calling a Function A function is called by specifying the function name followed by a space and then any arguments separated by spaces. For example minus The following programs illustrate the concepts. The following program calculates the volume of a cylinder when the radius and length are given as parameters. When you compile and execute the program, it yields the following output minus The following program returns the larger value of two given parameters minus When you compile and execute the program, it yields the following output minus When you compile and execute the program, it yields the following output minus Recursive Functions Recursive functions are functions that call themselves. You define a recursive using the let rec keyword combination. Syntax for defining a recursive function is minus For example minus The following program returns Fibonacci 1 to 10 minus When you compile and execute the program, it yields the following output minus The following program returns factorial 8 minus When you compile and execute the program, it yields the following output minus Arrow Notations in F F reports about data type in functions and values, using a chained arrow notation. Let us take an example of a function that takes one int input, and returns a string. In arrow notation, it is written as minus Data types are read from left to right. Let us take another hypothetical function that takes two int data inputs and returns a string. F reports the data type using chained arrow notation as minus The return type is represented by the rightmost data type in chained arrow notation. Some more examples minus float rarr float rarr float The function takes two float inputs, returns another float . int rarr string rarr float The function takes an int and a string input, returns a float . Lambda Expressions A lambda expression is an unnamed function. Let us take an example of two functions minus When you compile and execute the program, it yields the following output minus Now in the above example, if instead of defining the function mul, we could have used lambda expressions as minus When you compile and execute the program, it yields the following output minus Function Composition and Pipelining In F, one function can be composed from other functions. The following example shows the composition of a function named f, from two functions function1 and function2 minus When you compile and execute the program, it yields the following output minus F also provides a feature called pipelining of functions. Pipelining allows function calls to be chained together as successive operations. The following example shows that minus When you compile and execute the program, it yields the following output minus F - Strings In F, the string type represents immutable text as a sequence of Unicode characters. String Literals String literals are delimited by the quotation mark () character. Some special characters are there for special uses like newline, tab, etc. They are encoded using backslash () character. The backslash character and the related character make the escape sequence. The following table shows the escape sequence supported by F. Ways of lgnoring the Escape Sequence The following two ways makes the compiler ignore the escape sequence minus Using the symbol. Enclosing the string in triple quotes. When a string literal is preceded by the symbol, it is called a verbatim string. In that way, all escape sequences in the string are ignored, except that two quotation mark characters are interpreted as one quotation mark character. When a string is enclosed by triple quotes, then also all escape sequences are ignored, including double quotation mark characters. The following example demonstrates this technique showing how to work with XML or other structures that include embedded quotation marks minus When you compile and execute the program, it yields the following output minus Basic Operators on Strings The following table shows the basic operations on strings minus collect. (char rarr string) rarr string rarr string Creates a new string whose characters are the results of applying a specified function to each of the characters of the input string and concatenating the resulting strings. concat. string rarr seqltstringgt rarr string Returns a new string made by concatenating the given strings with a separator. exists. (char rarr bool) rarr string rarr bool Tests if any character of the string satisfies the given predicate. forall. (char rarr bool) rarr string rarr bool Tests if all characters in the string satisfy the given predicate. init. int rarr (int rarr string) rarr string Creates a new string whose characters are the results of applying a specified function to each index and concatenating the resulting strings. iter. (char rarr unit) rarr string rarr unit Applies a specified function to each character in the string. iteri. (int rarr char rarr unit) rarr string rarr unit Applies a specified function to the index of each character in the string and the character itself. length. string rarr int Returns the length of the string. map. (char rarr char) rarr string rarr string Creates a new string whose characters are the results of applying a specified function to each of the characters of the input string. mapi. (int rarr char rarr char) rarr string rarr string Creates a new string whose characters are the results of applying a specified function to each character and index of the input string. replicate. int rarr string rarr string Returns a string by concatenating a specified number of instances of a string. The following examples demonstrate the uses of some of the above functionalities minus The String. collect function builds a new string whose characters are the results of applying a specified function to each of the characters of the input string and concatenating the resulting strings. When you compile and execute the program, it yields the following output minus The String. concat function concatenates a given sequence of strings with a separator and returns a new string. When you compile and execute the program, it yields the following output minus The String. replicate method returns a string by concatenating a specified number of instances of a string. When you compile and execute the program, it yields the following output minus F - Options The option type in F is used in calculations when there may or may not exist a value for a variable or function. Option types are used for representing optional values in calculations. They can have two possible values minus Some(x) or None . For example, a function performing a division will return a value in normal situation, but will throw exceptions in case of a zero denominator. Using options here will help to indicate whether the function has succeeded or failed. An option has an underlying type and can hold a value of that type, or it might not have a value. Using Options Let us take the example of division function. The following program explains this minus Let us write a function div, and send two arguments to it 20 and 5 minus When you compile and execute the program, it yields the following output minus If the second argument is zero, then the program throws an exception minus When you compile and execute the program, it yields the following output minus In such cases, we can use option types to return Some (value) when the operation is successful or None if the operation fails. The following example demonstrates the use of options minus When you compile and execute the program, it yields the following output minus Option Properties and Methods The option type supports the following properties and methods minus F - Tuples F - Records F - Lists F - Sequences F - Discriminated Unions F - Mutable Data F - Arrays F - Mutable Lists F - Mutable Dictionary Initializes a new instance of the Dictionary(TKey, TValue) class that is empty, has the default initial capacity, and uses the default equality comparer for the key type. Dictionary(TKey, TValue)(IDictionary(TKey, TValue)) Initializes a new instance of the Dictionary(TKey, TValue) class that contains elements copied from the specified IDictionary(TKey, TValue) and uses the default equality comparer for the key type. Initializes a new instance of the Dictionary(TKey, TValue) class that is empty, has the default initial capacity, and uses the specified IEqualityComparer(T). Initializes a new instance of the Dictionary(TKey, TValue) class that is empty, has the specified initial capacity, and uses the default equality comparer for the key type. Dictionary(TKey, TValue)(IDictionary(TKey, TValue), IEqualityComparer(TKey)) Initializes a new instance of the Dictionary(TKey, TValue) class that contains elements copied from the specified IDictionary(TKey, TValue) and uses the specified IEqualityComparer(T). Dictionary(TKey, TValue)(Int32, IEqualityComparer(TKey)) Initializes a new instance of the Dictionary(TKey, TValue) class that is empty, has the specified initial capacity, and uses the specified IEqualityComparer(T). Dictionary(TKey, TValue)(SerializationInfo, StreamingContext) Initializes a new instance of the ictionary(TKey, TValue) class with serialized data. F - Basic IO F - Generics F - Delegates F - Enumerations F - Pattern Matching F - Exception Handling F - Classes F - Structures F - Operator Overloading F - Inheritance F - Interfaces F - Events F - Modules F - Namespaces