<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Open Forem: krlz</title>
    <description>The latest articles on Open Forem by krlz (@krlz).</description>
    <link>https://open.forem.com/krlz</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F947301%2Fa9309253-8434-4599-9db3-27864ef23a92.jpg</url>
      <title>Open Forem: krlz</title>
      <link>https://open.forem.com/krlz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://open.forem.com/feed/krlz"/>
    <language>en</language>
    <item>
      <title>Britain Forces Vets to Publish Prices as a Global Reckoning Over Pet Care Costs Takes Shape</title>
      <dc:creator>krlz</dc:creator>
      <pubDate>Wed, 25 Mar 2026 09:09:20 +0000</pubDate>
      <link>https://open.forem.com/krlz/britain-forces-vets-to-publish-prices-as-a-global-reckoning-over-pet-care-costs-takes-shape-ifd</link>
      <guid>https://open.forem.com/krlz/britain-forces-vets-to-publish-prices-as-a-global-reckoning-over-pet-care-costs-takes-shape-ifd</guid>
      <description>&lt;h2&gt;
  
  
  The Bill Comes Due
&lt;/h2&gt;

&lt;p&gt;On Monday, the United Kingdom's Competition and Markets Authority did something no government body had ever done at this scale: it told every veterinary practice in the country to post its prices — or face consequences. Prescription fees will be capped at &lt;strong&gt;£21 for a first medication&lt;/strong&gt; and &lt;strong&gt;£12.50 for each additional one&lt;/strong&gt;. Any treatment expected to cost more than &lt;strong&gt;£500&lt;/strong&gt; will require a written estimate, itemized in full. And by December, every clinic must publicly disclose who actually owns it — a pointed reform in a market where corporate consolidation has quietly swallowed independent practices while pet owners had no idea.&lt;/p&gt;

&lt;p&gt;The reforms, which become legally binding by &lt;strong&gt;September 23, 2026&lt;/strong&gt;, are the conclusion of a sweeping market investigation that found UK veterinary fees have risen at nearly &lt;strong&gt;twice the rate of inflation&lt;/strong&gt; in recent years. For the 12 million dog-owning households and 11 million cat-owning households across Britain, the announcement felt overdue.&lt;/p&gt;

&lt;p&gt;But the UK's intervention is not happening in isolation. Across Europe, Asia, and the Americas, a remarkably synchronized reckoning is underway — over what pet care costs, who controls the pet economy, and what rights animals themselves should have. This week's news from nine countries reveals a world grappling, often simultaneously, with the same uncomfortable questions about the creatures we claim to love most.&lt;/p&gt;

&lt;h2&gt;
  
  
  When Loving Your Pet Means You Can't Afford Your Pet
&lt;/h2&gt;

&lt;p&gt;The UK pricing reforms would be significant on their own, but they land in a global context that gives them particular resonance. In &lt;strong&gt;Germany&lt;/strong&gt;, where &lt;strong&gt;34 million pets&lt;/strong&gt; live in nearly half of all households, veterinary associations are bracing for the opposite outcome. The GOT — Germany's official veterinary fee schedule — is due for a formal government evaluation in the second quarter of 2026, and the president of the Bundesverband Praktizierender Tierärzte has already declared that the profession will &lt;strong&gt;"vehemently oppose any fee reductions"&lt;/strong&gt; and that prices &lt;strong&gt;"must actually rise further."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The median gross salary for an employed German veterinarian is &lt;strong&gt;€4,650 per month&lt;/strong&gt; — respectable but hardly lavish given the years of education required. Simple consultations already run between &lt;strong&gt;€30 and €80&lt;/strong&gt;, with complex operations reaching &lt;strong&gt;€2,500 or more&lt;/strong&gt;. For pet owners hoping for relief, the evaluation may deliver the opposite.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In a world where a routine surgery can cost more than a month's rent, the question is no longer whether people love their pets — it's whether they can afford to.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In &lt;strong&gt;Russia&lt;/strong&gt;, pet owners are spending an average of &lt;strong&gt;4,482 rubles per month&lt;/strong&gt; (roughly $45), and the veterinary services market hit a record &lt;strong&gt;60 billion rubles&lt;/strong&gt; in 2025. Yet only about &lt;strong&gt;one-third of Russia's 80 million pets are vaccinated&lt;/strong&gt; — a gap driven partly by cost but also by the absence, until now, of any system to even track who owns what animal. That is about to change dramatically.&lt;/p&gt;

&lt;p&gt;Meanwhile in &lt;strong&gt;Chile&lt;/strong&gt;, the pet care market has ballooned to &lt;strong&gt;$1.94 billion&lt;/strong&gt; — a 77% increase in just five years — with pet store numbers tripling since 2019. Chilean owners now spend up to &lt;strong&gt;100,000 pesos (about $100) per month&lt;/strong&gt; per pet. And in &lt;strong&gt;Japan&lt;/strong&gt;, despite a slowly shrinking pet population, the veterinary market is projected to nearly double from &lt;strong&gt;$2.9 billion to $4.8 billion by 2034&lt;/strong&gt;, driven by aging pets that need chronic disease management and an expanding pet insurance sector that's making advanced care accessible — and expected.&lt;/p&gt;

&lt;p&gt;The pattern is clear across every market: people are spending more, often much more, and the infrastructure of pet care — from pricing transparency to insurance access to pharmaceutical competition — is struggling to keep pace with what has become, for millions of families, a non-negotiable expense.&lt;/p&gt;

&lt;p&gt;One bright spot for dog owners: &lt;strong&gt;Elanco Animal Health&lt;/strong&gt; is preparing to commercially launch &lt;strong&gt;Befrena (tirnovetmab)&lt;/strong&gt;, a new anti-IL31 monoclonal antibody injection for canine allergic dermatitis approved by the USDA in late December 2025. With dosing intervals of &lt;strong&gt;six to eight weeks&lt;/strong&gt; compared to the four-to-eight-week window of Zoetis's market-dominant Cytopoint, a second competitor in this space could eventually exert downward pressure on one of the most common — and most expensive — reasons dogs visit the vet.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Shelter Crisis No One Saw Coming
&lt;/h2&gt;

&lt;p&gt;If the cost of keeping a pet is straining families, the cost of giving one up is straining something else entirely: the world's animal shelters.&lt;/p&gt;

&lt;p&gt;A study published this month by the &lt;strong&gt;University of Bristol&lt;/strong&gt;, in collaboration with Reaseheath College and University College Dublin, revealed that euthanasia rates for stray dogs in the UK have &lt;strong&gt;more than tripled&lt;/strong&gt; in just three years — from &lt;strong&gt;1.9% in 2021 to 6.3% in 2023&lt;/strong&gt;. Shelter intake surged from &lt;strong&gt;16,310 dogs to 23,287&lt;/strong&gt; over the same period. While rehoming rates improved from 41% to 53%, the sheer volume is overwhelming a system in which only &lt;strong&gt;27% of local authorities even have written welfare policies&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A specific breed dynamic is at play: the UK's ban on XL Bullies, enacted in early 2024, has driven a wave of surrenders. Bull breeds now dominate shelter populations, stay longer, and are harder to place — creating a bottleneck that pushes the entire system toward crisis.&lt;/p&gt;

&lt;p&gt;Across the Atlantic, the picture is no better. Approximately &lt;strong&gt;5.8 million dogs and cats&lt;/strong&gt; entered U.S. shelters and rescues in 2025. Adoptions are down. Intakes are up. Some facilities have resorted to housing animals in pop-up crates, converted bathrooms, and staff offices. As municipal shelters restrict intake to manage overflow, a secondary crisis has emerged: &lt;strong&gt;informal rescues and nonprofits&lt;/strong&gt; stepping in with good intentions but limited resources, sometimes tipping into hoarding situations with little oversight.&lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;Russia&lt;/strong&gt;, a shelter scandal in the Arkhangelsk region laid bare the consequences of institutional neglect. An investigation at a facility in the village of Povrakulskaya found dogs chained outdoors in freezing temperatures, cats crammed into tiny cages, animals lying on frozen feces without bedding or water. A parvovirosis outbreak forced a quarantine. Criminal proceedings under Article 245 of the Russian Criminal Code — animal cruelty — are being considered. Only &lt;strong&gt;23% of the facility's infrastructure&lt;/strong&gt; met legal requirements.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The shelter crisis is not a local problem with local causes. It is a global phenomenon driven by the same forces everywhere: rising costs, housing instability, and the slow unraveling of the pandemic-era adoption boom.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And in &lt;strong&gt;Bolivia&lt;/strong&gt;, the city of El Alto is confronting its own staggering reality: approximately &lt;strong&gt;270,000 dogs&lt;/strong&gt;, of which some &lt;strong&gt;100,000 live on the streets&lt;/strong&gt;. The municipality is now socializing a draft law on responsible pet ownership that would mandate registration with the Municipal Zoonosis Center and establish penalties under Bolivia's existing Law 700 — but the gap between the legislation and the scale of the problem remains enormous.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Legislative Wave From Amsterdam to Sacramento
&lt;/h2&gt;

&lt;p&gt;If 2025 was the year governments started noticing the pet welfare crisis, 2026 is the year they started legislating. And the breadth of new laws is remarkable.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Netherlands&lt;/strong&gt; made history on January 1 by becoming the first country in the world to &lt;strong&gt;ban the keeping of fold-eared and hairless cats&lt;/strong&gt; — including Scottish Folds and Sphynx cats. The reasoning is grounded in veterinary science: fold-eared cats suffer from osteochondrodysplasia, a genetic cartilage defect that causes chronic pain, stiff joints, and potential paralysis. Hairless cats cannot properly regulate body temperature and lack whiskers, impairing their sensory experience. Existing owners may keep their cats until natural death (provided they were microchipped before the ban), but breeding, selling, showing, or acquiring new ones carries a &lt;strong&gt;€1,500 fine&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The Dutch move is part of a broader European agenda. A new &lt;strong&gt;European Dogs and Cats Law&lt;/strong&gt; is being finalized, with stricter rules for breeding and trading, and &lt;strong&gt;mandatory microchipping for every dog and cat in the EU&lt;/strong&gt; — linked to both national and European databases. The Netherlands had already planned national cat microchipping for 2026, now pushed to 2027 as it aligns with the EU framework.&lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;Russia&lt;/strong&gt;, parallel reforms are even more sweeping. Starting &lt;strong&gt;September 1, 2026&lt;/strong&gt;, all cats and dogs must be registered through the federal FGIS "VetIS" system, marked with microchips, tags, or collars at the owner's expense. Simultaneously, the State Duma has advanced a &lt;strong&gt;breeder registry bill&lt;/strong&gt; — backed by 34 deputies — that would create a unified national organization to maintain a registry of breeders, establish breeding standards, and effectively shut down the grey market of undocumented puppy and kitten sales. And a separate bill proposes increasing &lt;strong&gt;animal cruelty fines from 80,000 to 1,000,000 rubles&lt;/strong&gt; — a twelvefold increase — with up to five years of forced labor for the worst offenses, including the deliberate poisoning of dogs in public spaces.&lt;/p&gt;

&lt;p&gt;In the &lt;strong&gt;United States&lt;/strong&gt;, a cascade of new state laws took effect in early 2026. &lt;strong&gt;California&lt;/strong&gt; banned cat declawing (joining New York, Maryland, and others), prohibited puppy mill broker sales, and enacted "Jerry's Law" making owners liable for deliberately failing to provide medical care. &lt;strong&gt;Florida&lt;/strong&gt; launched a public &lt;strong&gt;animal cruelty offender database&lt;/strong&gt; and made pet abandonment during emergencies a felony. &lt;strong&gt;Ohio's "Avery's Law"&lt;/strong&gt; authorizes courts to order euthanasia when a dog kills without provocation. And in a move that directly connects pet welfare to housing policy, California now requires landlords in state-financed affordable housing to allow at least one pet, with "pet rent" capped and deposits made refundable.&lt;/p&gt;

&lt;p&gt;Even &lt;strong&gt;Germany's circus animals&lt;/strong&gt; got new protections: as of March 1, 2026, new federal standards dictate minimum enclosure sizes, lighting, enrichment structures, and ventilation for animals in circuses, zoos, and dolphinariums — while a bill to ban circus animals entirely continues its slow progress through the Bundestag.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Tech Revolution in Pet Care
&lt;/h2&gt;

&lt;p&gt;While governments regulate, the private sector innovates — nowhere more aggressively than in &lt;strong&gt;China&lt;/strong&gt;, where the pet market crossed the &lt;strong&gt;310 billion yuan ($43.4 billion) mark&lt;/strong&gt; in 2025.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PILTON&lt;/strong&gt;, a state-backed Chinese startup, has shipped over &lt;strong&gt;10,000 smart pet capsule units&lt;/strong&gt; to 14 countries. These climate-controlled pods feature precision temperature regulation (±1°C), UV-sterilized air circulation, and AI cameras with smartphone monitoring. Most remarkably, China's largest hotpot restaurant chain, &lt;strong&gt;Haidilao&lt;/strong&gt;, has deployed them in over &lt;strong&gt;70 locations&lt;/strong&gt; — letting diners leave their pets in monitored, air-conditioned capsules while they eat. It is a uniquely Chinese solution to a universal problem: what do you do with your dog when you go to dinner?&lt;/p&gt;

&lt;p&gt;At &lt;strong&gt;CES 2026&lt;/strong&gt; in Las Vegas, Chinese smart pet company &lt;strong&gt;PETKIT&lt;/strong&gt; demonstrated AI-powered litter boxes that detect abnormalities in urination patterns — flagging, for example, when a cat's trips jump from six to twelve per day, suggesting a possible urinary tract infection. Smart pet products in China are growing at a &lt;strong&gt;38.7% compound annual growth rate&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;Chile&lt;/strong&gt;, technology met disaster response when volunteers created &lt;strong&gt;animalesperdidos.cl&lt;/strong&gt;, an AI-powered platform to reunite pets separated from their families during the devastating summer wildfires that burned over &lt;strong&gt;35,000 hectares&lt;/strong&gt; in the Biobío and Ñuble regions. The platform registered over &lt;strong&gt;500 lost pets&lt;/strong&gt; and achieved &lt;strong&gt;85 reunifications&lt;/strong&gt; — and remains active months later, a testament to both the scale of the displacement and the power of citizen-driven tech solutions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Forgotten Animals, Unforgotten Bonds
&lt;/h2&gt;

&lt;p&gt;Some of this week's most powerful stories are not about markets or legislation. They are about the bond between humans and animals tested by catastrophe.&lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;Japan&lt;/strong&gt;, just days after the 15th anniversary of the Fukushima disaster, international media profiled &lt;strong&gt;Toru Akama&lt;/strong&gt;, a 63-year-old former nuclear plant worker who has spent a decade and a half caring for pets abandoned when 154,000 residents evacuated the exclusion zone. He began by taking in 40 dogs, then 50. Over the years, he has placed &lt;strong&gt;more than 1,000 animals&lt;/strong&gt; with adoptive families, spending nearly all of his disaster compensation money on their care. He currently lives with 47 cats and 7 dogs — and his biggest worry is finding a successor. "I too am starting to get older," he told AFP.&lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;Cochabamba, Bolivia&lt;/strong&gt;, authorities raided the La Pampa market and rescued &lt;strong&gt;34 animals&lt;/strong&gt; — 32 dogs and 2 cats — crammed into cardboard boxes and poultry crates in an unventilated warehouse, none vaccinated against rabies, all destined for illegal sale. It was at least the second such raid at the same location in six months.&lt;/p&gt;

&lt;p&gt;And in &lt;strong&gt;Germany&lt;/strong&gt;, a puppy imported from Russia died of &lt;strong&gt;rabies&lt;/strong&gt; at a shelter in Rhineland-Palatinate — the first case in a country that has been rabies-free since 2008. The puppy's vaccination certificate was forged; post-mortem examination revealed it was significantly younger than claimed, meaning any vaccination would have been ineffective. The puppy had bitten its owner before dying. Criminal police are investigating, and veterinary associations are demanding an urgent crackdown on illegal cross-border puppy trafficking.&lt;/p&gt;

&lt;h2&gt;
  
  
  What It All Means
&lt;/h2&gt;

&lt;p&gt;Step back from the individual headlines and a coherent picture emerges. The world is in the midst of an unprecedented recalibration of the relationship between humans and companion animals. Pet populations are enormous — 80 million in Russia, 34 million in Germany, 16 million in Chile alone. Markets are booming, with global pet care valued at &lt;strong&gt;$273 billion and climbing toward $428 billion by 2032&lt;/strong&gt;. Technology is transforming everything from diagnosis to disaster response.&lt;/p&gt;

&lt;p&gt;But the systems we built to support all of this — veterinary pricing, shelter capacity, breeding oversight, legal protections — were designed for a world where pets were property, not family. The reforms sweeping from Westminster to Moscow to Sacramento are, in essence, the infrastructure of affection catching up to the reality of attachment.&lt;/p&gt;

&lt;p&gt;For the pet owner reading this over morning coffee, the takeaway is both reassuring and sobering. Governments are finally paying attention. Prices may become more transparent, breeders more accountable, shelters more supported. But the fundamental tension remains: loving an animal is free; caring for one properly is not — and the gap between those two truths is where every story in this roundup lives.&lt;/p&gt;

</description>
      <category>news</category>
      <category>pets</category>
      <category>global</category>
    </item>
    <item>
      <title>Your Pet's Next Doctor Visit Might Be an App — How 8 Countries Are Proving It</title>
      <dc:creator>krlz</dc:creator>
      <pubDate>Wed, 25 Mar 2026 01:05:26 +0000</pubDate>
      <link>https://open.forem.com/krlz/your-pets-next-doctor-visit-might-be-an-app-how-8-countries-are-proving-it-amj</link>
      <guid>https://open.forem.com/krlz/your-pets-next-doctor-visit-might-be-an-app-how-8-countries-are-proving-it-amj</guid>
      <description>&lt;p&gt;Your dog just had a weird episode — shaking, refusing food, pacing in circles. It's 11 PM, the vet clinic is closed, and Google is serving you a terrifying mix of "probably nothing" and "could be fatal." Five years ago, that was the end of the road until morning. In 2026, millions of pet owners around the world are opening an app instead — and getting answers in minutes.&lt;/p&gt;

&lt;p&gt;The global pet tech market has exploded to &lt;strong&gt;$19.1 billion in 2026&lt;/strong&gt;, on track to reach $52.9 billion by 2035. But behind those numbers lies something more interesting than market growth: a fundamental shift in how eight different countries — from Tokyo to Santiago, from Amsterdam to Moscow — are rethinking what it means to care for an animal in the digital age. And pet apps are at the center of it all.&lt;/p&gt;

&lt;h2&gt;
  
  
  The AI Revolution in Your Pet's Food Bowl
&lt;/h2&gt;

&lt;p&gt;At CES 2026 in Las Vegas, Chinese-founded &lt;strong&gt;PETKIT&lt;/strong&gt; made the biggest splash in the pet tech world by unveiling a complete AI-powered ecosystem that turns ordinary pet care into a data-driven health platform. Their three flagship devices — the &lt;strong&gt;EVERSWEET ULTRA&lt;/strong&gt; water fountain, the &lt;strong&gt;YUMSHARE DAILY FEAST&lt;/strong&gt; robotic wet food feeder, and the &lt;strong&gt;PUROBOT CRYSTAL DUO&lt;/strong&gt; automatic litter box — don't just automate tasks. They talk to each other.&lt;/p&gt;

&lt;p&gt;Each device is equipped with AI cameras and &lt;strong&gt;pet facial recognition&lt;/strong&gt; that identifies individual animals in multi-pet households. The water fountain tracks how much each cat drinks. The litter box monitors stool consistency and pH levels. The feeder logs eating patterns. All of this data flows into the PETKIT app, building what the company calls a "unified health dashboard" — a continuous health picture that can flag changes weeks before a human would notice them.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"The industry is moving away from simple 'connected' gadgets toward a new era of predictive wellness and pet-centric empathy — innovations that prioritize biological needs over mere mechanical convenience."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This isn't just a Western phenomenon. At the same CES event, Chinese startup &lt;strong&gt;灵尾纪元 (Lingwei Epoch)&lt;/strong&gt;, which recently closed a multi-million yuan Series A round, debuted the &lt;strong&gt;MOVA SureTrack Pro&lt;/strong&gt; smart collar. The collar packs UWB, GPS, and Wi-Fi triangulation into a module small enough for a cat, compressing lost-pet search ranges from &lt;strong&gt;hundreds of meters down to just two meters&lt;/strong&gt;. It even features two-way voice calling — owners can literally talk to their dogs while at work. The company's next-generation version, currently in development, promises to be a &lt;strong&gt;real-time pet emotion and behavior translator&lt;/strong&gt;, interpreting activity patterns, mood states, and anomalies 24/7.&lt;/p&gt;

&lt;h2&gt;
  
  
  Telemedicine: The Vet in Your Pocket
&lt;/h2&gt;

&lt;p&gt;Perhaps no single feature has transformed pet ownership more than veterinary telemedicine. The global veterinary telehealth market is projected to surge from &lt;strong&gt;$146 million in 2025 to $747 million by 2035&lt;/strong&gt;, growing at a staggering 18.8% annually. And every country is finding its own way in.&lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;Russia&lt;/strong&gt;, &lt;strong&gt;Petstory&lt;/strong&gt; — a Mars-backed digital platform — has become the go-to app for pet owners across 68+ cities. The app offers on-demand consultations via chat, audio, or video call with veterinarians who have a minimum of four years of clinical experience, available daily from 6 AM to 2 AM Moscow time. Beyond teleconsultations, Petstory maps nearby veterinary clinics, grooming salons, pet-friendly cafés, and even hotels that welcome dogs and cats. For a country spanning eleven time zones, the advantage is obvious: a pet owner in Vladivostok gets the same quality of veterinary advice as one in Moscow.&lt;/p&gt;

&lt;p&gt;Meanwhile in &lt;strong&gt;France&lt;/strong&gt;, where &lt;strong&gt;75 million domestic animals&lt;/strong&gt; make it the most pet-dense nation in Europe, the digital shift has been dramatic. A recent survey found that &lt;strong&gt;64% of French pet owners now regularly use apps or platforms&lt;/strong&gt; to care for their companions. The French startup ecosystem has responded: &lt;strong&gt;Maskots&lt;/strong&gt;, an AI-first pet app available in French, Spanish, and English, has grown over &lt;strong&gt;70% month-over-month&lt;/strong&gt; to 7,000+ active users. Its AI assistant is trained exclusively on veterinary and pet care data, offering breed-specific, life-stage-appropriate recommendations instead of generic advice. Meanwhile, connected devices like &lt;strong&gt;Caremitou&lt;/strong&gt; — a smart litter system — track litter box frequency to detect early signs of urinary issues, one of the most common and dangerous conditions in cats.&lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;Chile&lt;/strong&gt;, the insurtech startup &lt;strong&gt;Pawer&lt;/strong&gt; has carved out a unique niche by combining pet health insurance with unlimited televeterinary access in a single app. Founded by Guillermo Díaz in 2021, Pawer maintains a &lt;strong&gt;95% customer satisfaction rate&lt;/strong&gt; and covers everything from emergency accidents to preventive vaccinations. The app lets owners maintain complete digital health records and get reimbursed at any veterinary clinic in the country — a model that's now expanding to Peru, signaling Latin America's growing appetite for pet tech.&lt;/p&gt;

&lt;h2&gt;
  
  
  Japan's Quiet Pet Tech Boom
&lt;/h2&gt;

&lt;p&gt;Japan, home to one of the world's most sophisticated pet cultures, has approached pet apps with characteristic precision. The country's digital pet care market is booming, with &lt;strong&gt;Fuji Keizai Group&lt;/strong&gt; reporting accelerating growth in pet tech driven by the twin forces of "pet familization" (ペットの家族化) — the cultural trend of treating pets as full family members — and IoT maturity.&lt;/p&gt;

&lt;p&gt;Japanese consumers can choose from over &lt;strong&gt;37 dedicated pet apps&lt;/strong&gt; as of 2026, ranging from health management platforms to social networks for pet owners. The &lt;strong&gt;Nikkei&lt;/strong&gt; business newspaper now maintains a dedicated "Pet Tech" topic page, tracking the sector's transformation from niche hobby to serious industry. Smart devices like &lt;strong&gt;Toletta&lt;/strong&gt;, a cat toilet developed by a Sharp subsidiary, analyze weight, frequency, and urine volume to detect kidney disease — the leading cause of death in older cats — sometimes months before symptoms appear.&lt;/p&gt;

&lt;p&gt;The Japanese market is also pioneering what could be called "emotional tech" for pets: apps that track not just physical health metrics but behavioral patterns that indicate loneliness, anxiety, or boredom — crucial in a country where many pet owners work long hours.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Netherlands: Where Welfare Policy Meets Digital Innovation
&lt;/h2&gt;

&lt;p&gt;The Netherlands finds itself at a fascinating intersection of strict animal welfare legislation and digital pet care. As of &lt;strong&gt;January 1, 2026&lt;/strong&gt;, it became &lt;strong&gt;illegal to buy, sell, breed, or keep hairless cats and cats with folded ears&lt;/strong&gt; — including Scottish Folds and Sphynx breeds — due to the suffering caused by these genetic traits. Violations carry fines of up to &lt;strong&gt;€1,500&lt;/strong&gt;, and these breeds can no longer appear in shows, competitions, or even social media advertisements.&lt;/p&gt;

&lt;p&gt;This regulatory environment has fueled demand for apps that help owners navigate compliance. The &lt;strong&gt;HuisdierenApp&lt;/strong&gt;, the Netherlands' leading pet management platform, offers a comprehensive digital hub where owners can store microchip numbers, insurance details, and vaccination records — essential now that existing cats with banned traits must be microchipped to be legally retained. The app also provides video-call access to veterinarians and maps every nearby pet professional, from behaviorists to groomers.&lt;/p&gt;

&lt;p&gt;Dutch apps like &lt;strong&gt;DoggyDating&lt;/strong&gt; — which facilitates group dog walks — and &lt;strong&gt;Barkio&lt;/strong&gt; — a remote pet monitoring tool — reflect the Netherlands' broader philosophy: technology should enhance the human-animal bond, not replace it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Latin America's Underdog Story
&lt;/h2&gt;

&lt;p&gt;While the US and Asia dominate pet tech headlines, Latin America is writing its own compelling chapter. The regional pet tech sector is growing at &lt;strong&gt;7.1% annually&lt;/strong&gt; through 2032, with Chile leading the charge.&lt;/p&gt;

&lt;p&gt;Beyond Pawer, Chilean apps like &lt;strong&gt;PetHero&lt;/strong&gt; connect owners with vetted dog walkers, sitters, and at-home veterinarians. &lt;strong&gt;Petgram&lt;/strong&gt; merges social media features — photo sharing, community engagement — with practical tools like vaccination reminders and vet appointment scheduling. And &lt;strong&gt;Oliver Pets&lt;/strong&gt;, a Mexico-based platform using AI to personalize the entire ownership experience, is preparing its expansion into Chile.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bolivia&lt;/strong&gt; remains a frontier market, where veterinary services are still largely traditional and appointment booking happens through WhatsApp. But that gap represents opportunity: as smartphone penetration grows across the Altiplano, the infrastructure for leapfrogging directly to app-based pet care is already in place.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Edge-AI Shift: Why Your Pet's Data Is Staying Home
&lt;/h2&gt;

&lt;p&gt;One of the most significant — and underreported — trends of 2026 is the move from cloud computing to &lt;strong&gt;Edge AI&lt;/strong&gt; in pet devices. Instead of streaming video of your cat to a server farm in Virginia, the newest generation of smart pet cameras and feeders process visual data locally, on the device itself.&lt;/p&gt;

&lt;p&gt;The advantages are threefold. &lt;strong&gt;Privacy&lt;/strong&gt;: footage of your home never leaves your home. &lt;strong&gt;Reliability&lt;/strong&gt;: if your Wi-Fi goes down, the smart feeder still recognizes your pet and dispenses the right portion. And &lt;strong&gt;speed&lt;/strong&gt;: on-device processing means alerts about unusual behavior arrive in real-time, not after a round trip to the cloud.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Users report &lt;strong&gt;25% less food waste&lt;/strong&gt; with app-tracked feeders and &lt;strong&gt;40% reduced cleaning time&lt;/strong&gt; via robotic litter systems — tangible, everyday improvements that add up across the 300+ million pets in the countries covered by this story.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What This Means for Pet Owners
&lt;/h2&gt;

&lt;p&gt;The pet app revolution isn't just about convenience — though that matters too. It's about &lt;strong&gt;closing the information gap&lt;/strong&gt; between pet owners and the medical professionals who care for their animals. A cat that drinks 15% less water over two weeks might seem fine to the naked eye. An AI dashboard that has been tracking daily intake across months will flag it as a potential early sign of kidney disease.&lt;/p&gt;

&lt;p&gt;For pet owners in 2026, the message from Tokyo to Amsterdam, from Santiago to Moscow, is the same: the best app for your pet isn't the one with the most features — it's the one you'll actually use every day. Whether that's a simple vaccination reminder in Bolivia or a full AI health ecosystem in Shanghai, the technology is no longer the bottleneck. &lt;strong&gt;The future of pet care is already on your phone.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>pettech</category>
      <category>apps</category>
      <category>health</category>
      <category>news</category>
    </item>
    <item>
      <title>The Netherlands Just Banned Scottish Folds and Sphynx Cats — And the Rest of the World Is Watching</title>
      <dc:creator>krlz</dc:creator>
      <pubDate>Wed, 25 Mar 2026 00:57:12 +0000</pubDate>
      <link>https://open.forem.com/krlz/the-netherlands-just-banned-scottish-folds-and-sphynx-cats-and-the-rest-of-the-world-is-watching-h7f</link>
      <guid>https://open.forem.com/krlz/the-netherlands-just-banned-scottish-folds-and-sphynx-cats-and-the-rest-of-the-world-is-watching-h7f</guid>
      <description>&lt;p&gt;Since January 1, it has been illegal to buy, sell, or breed a Scottish Fold or a Sphynx cat anywhere in the Netherlands. Owners who acquired one of these beloved breeds after the cutoff face fines of up to &lt;strong&gt;€1,500&lt;/strong&gt;. Existing cats, if born and microchipped before the deadline, may live out their natural lives — but they cannot be exhibited at shows, entered into competitions, or bred. For the roughly 10,000 Dutch owners of folded-ear and hairless cats, the message from The Hague is unmistakable: the era of breeding animals for aesthetic traits that cause suffering is over.&lt;/p&gt;

&lt;p&gt;The Dutch ban is not happening in isolation. It is the sharpest edge of a global legislative movement that, in just the first quarter of 2026, has rewritten the rules of pet ownership from Sacramento to Moscow, from Santiago to Tokyo. Taken together, these changes signal something profound: governments around the world are no longer content to merely punish animal cruelty after the fact. They are stepping in to prevent it — even when that means telling pet owners which animals they can and cannot have.&lt;/p&gt;

&lt;h2&gt;
  
  
  When Cuteness Causes Pain
&lt;/h2&gt;

&lt;p&gt;The science behind the Dutch decision is not new, but the political will to act on it is. Scottish Fold cats carry a genetic mutation called &lt;strong&gt;osteochondrodysplasia&lt;/strong&gt; that affects cartilage throughout their bodies. It is this mutation that gives them their signature folded ears — the very feature that made them Instagram darlings and celebrity favorites. But the same defective cartilage causes progressive, debilitating arthritis that can leave cats in chronic pain, sometimes requiring euthanasia at a tragically young age.&lt;/p&gt;

&lt;p&gt;Sphynx cats, meanwhile, lack the fur that regulates body temperature and the whiskers that serve as critical sensory organs. They are more vulnerable to skin infections, ear problems, and respiratory issues. The Dutch government concluded that the welfare costs of these breeds simply outweigh the aesthetic pleasure they provide to humans.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"The suffering of the Scottish Fold is undeniable, and this kind of action is sorely needed on a much wider level. It brings public attention to the issue of pedigree breed health and starts a wider conversation, which can only be a good thing."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The ban has already sent ripples across Europe. In Belgium, the animal welfare organization Veeweyde has publicly asked whether similar legislation should follow. Germany's &lt;strong&gt;Deutscher Tierschutzbund&lt;/strong&gt; has long campaigned against what it calls &lt;em&gt;Qualzucht&lt;/em&gt; — literally "torture breeding" — and advocates are now pointing to the Netherlands as proof that bans are politically viable. The European Federation of Veterinarians (FVE) has endorsed the Dutch approach, calling it a model for the continent.&lt;/p&gt;

&lt;p&gt;The question is no longer whether other countries will follow, but when.&lt;/p&gt;

&lt;h2&gt;
  
  
  California Joins the Claw-Free Movement
&lt;/h2&gt;

&lt;p&gt;Across the Atlantic, California rang in 2026 with its own landmark animal welfare legislation. &lt;strong&gt;Assembly Bill 867&lt;/strong&gt;, signed by Governor Gavin Newsom, makes it illegal to declaw a cat in the state unless the procedure is medically necessary for the animal's health. Veterinarians who continue to perform cosmetic or convenience-based declawing risk having their licenses suspended or revoked by the California Veterinary Medical Board.&lt;/p&gt;

&lt;p&gt;Declawing — known medically as onychectomy — involves amputating the last bone of each toe, comparable to cutting off a human finger at the final knuckle. Research has consistently linked the procedure to long-term pain, behavioral changes including increased aggression and biting, and litter box avoidance. California now joins &lt;strong&gt;New York, Maryland, Massachusetts&lt;/strong&gt;, and Washington, D.C. in banning the practice, but its sheer size — home to nearly 40 million people and an estimated 7 million pet cats — makes this the most consequential state-level ban yet.&lt;/p&gt;

&lt;p&gt;California didn't stop there. &lt;strong&gt;AB 519&lt;/strong&gt; banned pet brokers — middlemen who profit from selling animals bred by others — effectively targeting the puppy mill pipeline. &lt;strong&gt;SB 312&lt;/strong&gt; requires dog importers to submit health certificates electronically within 10 days of shipment, making them publicly accessible. And &lt;strong&gt;SB 602&lt;/strong&gt; allows designated shelters to conduct veterinary appointments without a supervising vet on-site, expanding care access in underserved communities.&lt;/p&gt;

&lt;p&gt;The combined effect is a state that is simultaneously restricting harmful practices and expanding access to humane care — a dual strategy that animal welfare advocates have long championed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Russia's Ambitious Plan to Register 75 Million Pets
&lt;/h2&gt;

&lt;p&gt;Perhaps the most sweeping piece of pet legislation anywhere in the world is taking shape in Russia. Starting &lt;strong&gt;September 1, 2026&lt;/strong&gt;, every cat and dog owner in the country will be required to mark their pet — via collar, tag, or microchip, at the owner's choice — and register the animal in the federal veterinary information system known as &lt;strong&gt;FGIS VetIS&lt;/strong&gt;. Registration itself will be free, though the cost of tagging falls on owners.&lt;/p&gt;

&lt;p&gt;The scale is staggering. Russia has approximately &lt;strong&gt;75 million domestic pets&lt;/strong&gt; but, until now, no centralized tracking system. Twenty-six of Russia's regions have already begun implementing registration, with the Moscow region leading since 2023. The Presidential Council for Civil Society and Human Rights has proposed integrating the registry with &lt;strong&gt;Gosuslugi&lt;/strong&gt;, Russia's digital government services portal — potentially creating one of the world's largest pet databases.&lt;/p&gt;

&lt;p&gt;But registration is just one pillar of a broader overhaul. In March, Senator Airat Gibatdinov introduced a bill to increase fines for animal cruelty &lt;strong&gt;tenfold&lt;/strong&gt;, from the current cap of 80,000 rubles to &lt;strong&gt;1,000,000 rubles&lt;/strong&gt; (approximately $10,000). The State Duma is also considering a law that would cap the number of pets per apartment based on living space — &lt;strong&gt;18 square meters per adult dog or cat&lt;/strong&gt; — targeting hoarding situations that harm both animals and neighbors. Meanwhile, proposed amendments would give courts the power to &lt;strong&gt;confiscate pets from convicted animal abusers&lt;/strong&gt;, closing a legal gap that has long frustrated prosecutors.&lt;/p&gt;

&lt;p&gt;And as of &lt;strong&gt;March 1&lt;/strong&gt;, new veterinary drug regulations came into force: antiparasitic medications — including common flea and tick treatments — now require a veterinary prescription, ending over-the-counter sales. The change mirrors pharmaceutical trends in Western Europe and is designed to combat counterfeit drugs, though it adds a new layer of logistical burden for Russia's pet owners.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"In five years, 65,731 integrated veterinary services were provided to pets in the municipality of La Paz alone — a figure that reveals both the scale of Latin America's stray animal challenge and the growing political will to address it."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Latin America Writes Its Own Playbook
&lt;/h2&gt;

&lt;p&gt;The legislative momentum extends well into the Southern Hemisphere. In &lt;strong&gt;Bolivia&lt;/strong&gt;, the city of El Alto — home to an estimated &lt;strong&gt;270,000 dogs&lt;/strong&gt;, roughly 100,000 of them strays — is socializing a new draft law on responsible pet ownership focused on public health and population control. In March, animal control officers in &lt;strong&gt;Cochabamba&lt;/strong&gt; conducted a dramatic rescue operation, pulling &lt;strong&gt;34 animals&lt;/strong&gt; from cramped, unventilated storage containers near the La Pampa market, where dogs and cats had been crammed into cardboard boxes and chicken transport crates.&lt;/p&gt;

&lt;p&gt;Across the border in &lt;strong&gt;Chile&lt;/strong&gt;, where &lt;strong&gt;86% of households&lt;/strong&gt; now own a pet and the national pet population exceeds &lt;strong&gt;12 million&lt;/strong&gt;, the conversation has shifted from basic welfare to urban planning. A March article in &lt;em&gt;El Periodista&lt;/em&gt; asked a question that would have seemed absurd a decade ago: are Chilean cities built for humans or for pets? The piece explored a European-style debate now taking root in Santiago — whether urban infrastructure, from parks to public transit, should be redesigned to accommodate the reality that pets are now central to daily life.&lt;/p&gt;

&lt;p&gt;On the ground, the Chilean government is investing in sterilization as its primary tool for population management. In the southern province of &lt;strong&gt;Chiloé&lt;/strong&gt;, the national government allocated &lt;strong&gt;86.87 million pesos&lt;/strong&gt; for a comprehensive 2026 spay-neuter program targeting rural areas, where uncontrolled breeding threatens both domestic animals and native wildlife.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Rabies Scare Exposes Europe's Import Loopholes
&lt;/h2&gt;

&lt;p&gt;In late January, a dog imported from Russia died of &lt;strong&gt;rabies&lt;/strong&gt; in Germany's Rhineland-Palatinate region, near Mannheim. Laboratory confirmation came on February 10, triggering an investigation that exposed troubling gaps in Europe's animal import system.&lt;/p&gt;

&lt;p&gt;The dog had arrived with all required documentation — microchip, vaccination certificate, and antibody test results. But post-mortem analysis revealed the animal was &lt;strong&gt;younger than declared&lt;/strong&gt; at the time of import, meaning the paperwork was either fraudulent or inauthentic. The dog was part of a consignment of &lt;strong&gt;24 animals&lt;/strong&gt; — 22 dogs and 2 cats — imported by an animal charity and distributed across Germany and other European countries.&lt;/p&gt;

&lt;p&gt;Germany's Environment Minister &lt;strong&gt;Katrin Eder&lt;/strong&gt; used the case to underscore the critical importance of regular vaccination, warning that only consistent immunization can reduce the risk of lethal rabies transmission through bites. Germany has been officially rabies-free since 2008, and this imported case — the first in years — served as a jarring reminder that the disease is only a border crossing away.&lt;/p&gt;

&lt;p&gt;The Friedrich-Loeffler-Institut, Germany's federal research institute for animal health, is now calling for stricter verification of import documents, particularly for rescue animals brought in by charitable organizations — a well-intentioned channel that, in this case, became a vector for a deadly virus.&lt;/p&gt;

&lt;h2&gt;
  
  
  The AI Revolution Reaches the Veterinary Clinic
&lt;/h2&gt;

&lt;p&gt;While legislatures write new rules, technology is quietly reshaping veterinary practice from the inside. A major survey released in March by &lt;strong&gt;Instinct Science&lt;/strong&gt; found that &lt;strong&gt;48% of general veterinary practices&lt;/strong&gt; in the United States now use artificial intelligence in some capacity. The most common applications are &lt;strong&gt;medical record and SOAP note creation&lt;/strong&gt; (used by 63% of AI-adopting practices) and &lt;strong&gt;diagnostic assistance&lt;/strong&gt; (38%).&lt;/p&gt;

&lt;p&gt;The implications extend beyond efficiency. AI is also accelerating research. In Russia, the veterinary information portal &lt;strong&gt;ZooInform&lt;/strong&gt; reported in March that neural networks have achieved &lt;strong&gt;expert-level accuracy&lt;/strong&gt; in selecting clinical cases for retrospective veterinary studies — a tedious, labor-intensive process that has historically bottlenecked research. If scalable, this could dramatically speed up the pace of veterinary science, enabling faster identification of disease patterns and treatment protocols.&lt;/p&gt;

&lt;p&gt;Meanwhile, Mars Veterinary Health published its 2025 Science Impact Report, highlighting &lt;strong&gt;over 500 peer-reviewed publications&lt;/strong&gt; from its global network of clinician scientists. Among the key breakthroughs: the identification of the &lt;strong&gt;SLAMF1 genetic variant&lt;/strong&gt; linked to canine atopic dermatitis, which is now being developed into a DNA test in collaboration with academic partners. For the millions of dogs who suffer from chronic skin allergies, this could eventually mean earlier diagnosis and more targeted treatment.&lt;/p&gt;

&lt;h2&gt;
  
  
  China's Pet Economy Breaks Records — Again
&lt;/h2&gt;

&lt;p&gt;China's urban pet market for dogs and cats reached &lt;strong&gt;312.6 billion yuan&lt;/strong&gt; (approximately $43 billion) in 2025, a 4.1% increase over the prior year, with projections pointing toward &lt;strong&gt;405 billion yuan by 2028&lt;/strong&gt;. The cat segment is growing faster than dogs — up 5.2% compared to 3.2% — reflecting a global trend toward feline ownership, particularly among young urban professionals living in smaller spaces.&lt;/p&gt;

&lt;p&gt;The Chinese market is also the global epicenter of &lt;strong&gt;smart pet technology&lt;/strong&gt;. The city of &lt;strong&gt;Nanjing&lt;/strong&gt; announced plans to create dedicated "pet consumption streets" across three districts, while this week's &lt;strong&gt;Nanjing International Pet Expo&lt;/strong&gt; (March 27-29) is expected to showcase the latest generation of intelligent pet habitats — climate-controlled capsules that monitor temperature, air quality, and even pet behavior through embedded sensors.&lt;/p&gt;

&lt;p&gt;In Japan, the professionalization of pet care continues with the fourth annual &lt;strong&gt;national examination for Certified Companion Animal Nurses&lt;/strong&gt;, a state license established in 2022. The February 2026 exam maintained a pass rate near &lt;strong&gt;88%&lt;/strong&gt;, reflecting a maturing pipeline of formally trained veterinary support staff — a development that countries struggling with veterinary workforce shortages are watching closely.&lt;/p&gt;

&lt;h2&gt;
  
  
  What It All Means for Pet Owners
&lt;/h2&gt;

&lt;p&gt;The thread connecting a banned cat breed in Amsterdam to a rescued dog in Cochabamba to an AI-assisted diagnosis in Kansas City is this: the world is recalibrating its relationship with companion animals. Governments are no longer treating pets as mere property. They are recognizing them as beings whose welfare demands proactive protection — through breeding restrictions, mandatory identification, prescription drug oversight, and professional care standards.&lt;/p&gt;

&lt;p&gt;For everyday pet owners, the practical takeaways are straightforward. Check whether your pet's breed or your care practices may be affected by new or pending legislation in your region. If you're considering a new pet, research the breed's health profile, not just its appearance. Keep vaccinations current — the German rabies case is a stark reminder that prevention is non-negotiable. And if your vet mentions AI-assisted diagnostics, know that the technology is no longer experimental — it is becoming standard practice.&lt;/p&gt;

&lt;p&gt;The age of passive pet ownership is ending. What's replacing it is a world that expects more from us — and promises more for them.&lt;/p&gt;

</description>
      <category>news</category>
      <category>pets</category>
      <category>global</category>
    </item>
    <item>
      <title>Pet News Roundup: March 23, 2026</title>
      <dc:creator>krlz</dc:creator>
      <pubDate>Mon, 23 Mar 2026 20:57:29 +0000</pubDate>
      <link>https://open.forem.com/krlz/pet-news-roundup-march-23-2026-4gll</link>
      <guid>https://open.forem.com/krlz/pet-news-roundup-march-23-2026-4gll</guid>
      <description>&lt;p&gt;This week's global pet news brings a mix of &lt;strong&gt;landmark legislation&lt;/strong&gt;, community-driven rescue efforts, and the growing recognition that our animals deserve better care no matter where they live. From policy shifts in Moscow to mobile vet clinics in the Chilean countryside, the world is paying attention to our four-legged family members.&lt;/p&gt;

&lt;h2&gt;
  
  
  United States
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;PetSmart Charities announced $3 million in grants&lt;/strong&gt; to local animal welfare organizations ahead of &lt;strong&gt;National Adoption Week&lt;/strong&gt; (March 23–29, 2026), bringing adoptable pets into PetSmart stores across the country to boost shelter-to-home placements.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;California's cat declawing ban&lt;/strong&gt;, which took effect January 1, continues to draw national attention as one of the strongest animal protection measures in the country. The state also enacted &lt;strong&gt;AB 516&lt;/strong&gt;, allowing registered veterinary technicians to perform a broader range of medical tasks, helping clinics serve more animals amid an ongoing veterinary staffing shortage.&lt;/li&gt;
&lt;li&gt;A major milestone from &lt;strong&gt;Best Friends Animal Society&lt;/strong&gt;: the number of cats killed in U.S. shelters has &lt;strong&gt;dropped nearly 75% over the past decade&lt;/strong&gt;, thanks to expanded adoption programs, community cat initiatives, and foster care networks.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;"The number of cats killed in U.S. shelters has dropped by nearly 75 percent in ten years — proof that community-driven programs and compassionate policy really do save lives."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Russia
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;New pet registration fines took effect March 1&lt;/strong&gt; in Russia's Zabaykalsky Krai, where owners now face penalties of &lt;strong&gt;3,000–5,000 rubles&lt;/strong&gt; for failing to register their dogs — part of a broader national push toward mandatory pet identification.&lt;/li&gt;
&lt;li&gt;Russia introduced &lt;strong&gt;item-level tracking of all veterinary medications&lt;/strong&gt; through the "Chestniy Znak" (Honest Mark) labeling system starting March 1, 2026, aiming to combat counterfeit pet medicines and improve supply chain transparency.&lt;/li&gt;
&lt;li&gt;In veterinary research, Russian scientists are pioneering the use of &lt;strong&gt;AI-powered neural networks&lt;/strong&gt; to select clinical cases for retrospective studies with expert-level accuracy, addressing long-standing inconsistencies in veterinary medical record-keeping.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Bolivia
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Bolivia continues to grapple with its &lt;strong&gt;stray dog crisis&lt;/strong&gt;: between the cities of &lt;strong&gt;El Alto and La Paz alone&lt;/strong&gt;, an estimated &lt;strong&gt;300,000 dogs&lt;/strong&gt; roam the streets, with roughly half being "semi-strays" — pets that have homes but wander freely during the day.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;2017 municipal law in La Paz&lt;/strong&gt; (Ley Municipal 239) was designed to promote companion animal welfare through spay/neuter programs and a pet registry, but remains largely &lt;strong&gt;unimplemented and unenforceable&lt;/strong&gt;, leaving animal advocates frustrated.&lt;/li&gt;
&lt;li&gt;International organizations like &lt;strong&gt;Humane World for Animals&lt;/strong&gt; continue to support Bolivia through cross-border programs, including veterinary training and partnerships to improve animal care infrastructure in underserved areas.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Chile
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Humane World for Animals Chile&lt;/strong&gt; launched a major 2026 welfare program sending &lt;strong&gt;18 veterinary specialists&lt;/strong&gt; to remote communities in the &lt;strong&gt;Coquimbo region&lt;/strong&gt; — places where the nearest vet clinic is a 40-minute drive away. The team provided free spay/neuter services, vaccinations, and health checkups to dogs and cats in &lt;strong&gt;Barraza, Salala, and Oruro&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Chile's pet market has grown into a &lt;strong&gt;$1.6 billion industry&lt;/strong&gt;, with pet food accounting for roughly 70% of sales. The country's &lt;strong&gt;Responsible Pet Ownership Law&lt;/strong&gt; has resulted in over &lt;strong&gt;1.3 million registered pets&lt;/strong&gt; and &lt;strong&gt;449,000 sterilizations&lt;/strong&gt; since its enactment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Professor Constanza Cabello&lt;/strong&gt; from the University of Chile's veterinary faculty brought six students to the Coquimbo field program, combining hands-on training with real community impact — a model that's gaining attention across Latin America.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Germany
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Germany remains one of Europe's largest pet markets, with &lt;strong&gt;33.9 million pets&lt;/strong&gt; across the country, led by &lt;strong&gt;15.7 million cats&lt;/strong&gt; and &lt;strong&gt;10.5 million dogs&lt;/strong&gt;. However, total pet ownership dipped slightly from 45% to 44% of households in 2024.&lt;/li&gt;
&lt;li&gt;The German government opened nominations for the &lt;strong&gt;2026 Animal Welfare Research Prize&lt;/strong&gt; (Tierschutzforschungspreis), with submissions closing March 31 — highlighting the country's ongoing investment in humane scientific alternatives.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;Purina symposium on the gut-brain axis&lt;/strong&gt; held in Germany on March 13 brought together veterinary experts to discuss how digestive health influences pet behavior and mental well-being, reflecting the growing trend of &lt;strong&gt;science-based pet nutrition&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Rising &lt;strong&gt;pet food and veterinary costs&lt;/strong&gt; driven by inflation are pushing German owners toward online shopping, with pet-related &lt;strong&gt;e-commerce revenues reaching $1.4 billion&lt;/strong&gt; and the trend toward premium, humanized pet products continuing to grow.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Whether it's a shelter cat finding a home during National Adoption Week in the US, a street dog finally getting vaccinated in rural Chile, or a new AI tool helping Russian veterinarians improve diagnostics — the common thread is clear: &lt;strong&gt;communities around the world are investing more in the health and welfare of their companion animals&lt;/strong&gt;. As pet owners, staying informed about these developments helps us all be better advocates for the animals we love.&lt;/p&gt;

</description>
      <category>news</category>
      <category>pets</category>
      <category>global</category>
    </item>
    <item>
      <title>How a corruption-convicted company broke Chile's national ID system — and walked away with $480M</title>
      <dc:creator>krlz</dc:creator>
      <pubDate>Sat, 21 Mar 2026 01:23:18 +0000</pubDate>
      <link>https://open.forem.com/krlz/how-a-corruption-sanctioned-company-got-a-480m-contract-to-build-chiles-national-id-system-and-2pk4</link>
      <guid>https://open.forem.com/krlz/how-a-corruption-sanctioned-company-got-a-480m-contract-to-build-chiles-national-id-system-and-2pk4</guid>
      <description>&lt;p&gt;In December 2024, Chile's Registro Civil rolled out a brand new national identity system. It crashed on day one. The system behind every Chilean's cédula de identidad and passport went down nationwide — biometric capture failed, payments broke, documents wouldn't activate, and data errors appeared in identity records.&lt;/p&gt;

&lt;p&gt;The company responsible? &lt;strong&gt;IDEMIA&lt;/strong&gt; — a French firm built from the merger of two companies with documented corruption histories, owned by American private equity, and already planning its exit before the ink on Chile's contract was dry.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Backstory: A Company Born from Corruption
&lt;/h2&gt;

&lt;p&gt;IDEMIA doesn't exist in a vacuum. It was created in 2017 from the merger of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Oberthur Technologies&lt;/strong&gt; — debarred by the World Bank for 2.5 years for bribing officials in Bangladesh to win a national ID contract&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Safran Identity &amp;amp; Security (Morpho)&lt;/strong&gt; — fined €500,000 by a French court for bribing Nigerian officials for a €170M ID card contract&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The merger was orchestrated by &lt;strong&gt;Advent International&lt;/strong&gt;, a Boston-based private equity firm that owned Oberthur since 2011. Safran sold its identity division to Advent, the two merged into OT-Morpho, and then rebranded as &lt;strong&gt;IDEMIA&lt;/strong&gt; — a clean name for a dirty history.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Rap Sheet
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Year&lt;/th&gt;
&lt;th&gt;Country&lt;/th&gt;
&lt;th&gt;What Happened&lt;/th&gt;
&lt;th&gt;Penalty&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;2012&lt;/td&gt;
&lt;td&gt;Nigeria&lt;/td&gt;
&lt;td&gt;Safran/Morpho bribed officials for ID card contract&lt;/td&gt;
&lt;td&gt;€500K fine&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2017&lt;/td&gt;
&lt;td&gt;Bangladesh&lt;/td&gt;
&lt;td&gt;Oberthur bribed officials for national ID project&lt;/td&gt;
&lt;td&gt;World Bank debarment (2.5 years)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2022&lt;/td&gt;
&lt;td&gt;Bangladesh&lt;/td&gt;
&lt;td&gt;IDEMIA settled corruption charges (same case)&lt;/td&gt;
&lt;td&gt;€8M fine, 4 executives flagged for prosecution&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2022&lt;/td&gt;
&lt;td&gt;Angola&lt;/td&gt;
&lt;td&gt;IDEMIA France corrupted public officials (2007-2011)&lt;/td&gt;
&lt;td&gt;€15.5M fine via CJIP (no trial)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;td&gt;Nepal&lt;/td&gt;
&lt;td&gt;Complaints of payments to brokers via foreign accounts&lt;/td&gt;
&lt;td&gt;Under investigation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;Kenya&lt;/td&gt;
&lt;td&gt;National Assembly voted to ban IDEMIA for 10 years&lt;/td&gt;
&lt;td&gt;Suspended from government contracts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;Ecuador&lt;/td&gt;
&lt;td&gt;Declared IDEMIA a "failed adjudicator" in similar tender&lt;/td&gt;
&lt;td&gt;Contract revoked&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Total fines paid: &lt;strong&gt;~€24 million&lt;/strong&gt; across multiple countries. Executives imprisoned: &lt;strong&gt;zero&lt;/strong&gt; (publicly known).&lt;/p&gt;

&lt;h2&gt;
  
  
  The People: Who Did What
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The Executives Who Walked Free
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;In Nigeria&lt;/strong&gt;, former Safran/Morpho executives &lt;strong&gt;Jean-Pierre Delarue&lt;/strong&gt; (sales manager in Nigeria) and &lt;strong&gt;François Perrachon&lt;/strong&gt; were charged for the bribery scheme that won a €170M ID card contract. A French court &lt;strong&gt;acquitted both of them&lt;/strong&gt;. The company paid the €500K fine. Nobody went to prison.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In Bangladesh&lt;/strong&gt;, French prosecutors identified nearly &lt;strong&gt;€6.1 million in bribes&lt;/strong&gt; intended for &lt;strong&gt;Tarique Ahmed Siddique&lt;/strong&gt;, a Bangladeshi general. The money was funneled through &lt;strong&gt;Ziaur Rahman&lt;/strong&gt;, who led &lt;strong&gt;Tiger IT&lt;/strong&gt;, the local subcontractor. IDEMIA settled for €8M. &lt;strong&gt;Four former Oberthur executives&lt;/strong&gt; were flagged for separate prosecution — their names have never been made public, and there is no record of convictions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In Angola&lt;/strong&gt;, IDEMIA paid €15.5M via a CJIP (French deferred prosecution agreement) for corrupting public officials between 2007-2011. &lt;strong&gt;No individuals were named or prosecuted&lt;/strong&gt;. The deal was signed, the fine was paid, and the file was closed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pierre Barrial&lt;/strong&gt;, IDEMIA's CEO from 2020 to 2025 — the period covering Chile's contract execution and system crash — has faced no public investigation. He was quietly moved to the Supervisory Board when IDEMIA restructured its governance in mid-2025.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Chilean Officials: A Revolving Door
&lt;/h3&gt;

&lt;p&gt;The tender process consumed &lt;strong&gt;three Registro Civil directors&lt;/strong&gt; and exposed deep conflicts of interest:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Jorge Álvarez Vásquez&lt;/strong&gt; — Director who fined IDEMIA $164 million CLP in July 2020 for contract breaches and obstructing an investigation into &lt;strong&gt;forged identity documents by Registro Civil employees&lt;/strong&gt;. He was removed from his position on October 16, 2020 — barely one day after extending a deadline in the tender process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sergio Mierzejewski&lt;/strong&gt; — Replaced Álvarez. A private-sector figure linked to the UDI political party, he awarded the bid to the Chinese consortium Aisino. A &lt;strong&gt;criminal complaint (querella)&lt;/strong&gt; was filed against him for "privileging" Aisino, alleging &lt;strong&gt;incompatible negotiation, trafficking in influence, violation of secrecy, and use of reserved information&lt;/strong&gt;. But the complainant, Bruno Opazo Ruiz, was accused by Aisino of having links to IDEMIA — suggesting the legal action itself may have been orchestrated to eliminate the Chinese competitor. Mierzejewski eventually resigned.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Jaime Gajardo Falcón&lt;/strong&gt; — Chile's Undersecretary of Justice, who had a key role in appointing the next Registro Civil director. He worked for &lt;strong&gt;four years at ZC Abogados&lt;/strong&gt;, the law firm of jurist Francisco Zúñiga (former Constitutional Court minister) — and ZC Abogados is &lt;strong&gt;IDEMIA's main legal representative in Chile&lt;/strong&gt;. Gajardo claims: &lt;em&gt;"I never had any participation in the consultancies or representations that the firm provided to IDEMIA"&lt;/em&gt; and &lt;em&gt;"I have never received any payment from IDEMIA nor have I had any contact with its representatives."&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The France Trip
&lt;/h3&gt;

&lt;p&gt;After the contract was re-awarded to IDEMIA following Aisino's exclusion, &lt;strong&gt;Registro Civil officials traveled to France — paid for entirely by IDEMIA&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Jorge Núñez&lt;/strong&gt; — Acting National Director&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Felipe Barnachea&lt;/strong&gt; — Chief of Staff&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ricardo Salgado&lt;/strong&gt; — Head of Technology and Identification Services&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The trip was presented as a "technical visit" to review ID card and passport samples. Former officials pointed out that &lt;strong&gt;Núñez and Barnachea are not technical experts&lt;/strong&gt;, and the samples could have been mailed to Santiago. The trip occurred just before IDEMIA renewed a contract worth &lt;strong&gt;$55 billion CLP&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Workers Who Paid the Price
&lt;/h3&gt;

&lt;p&gt;After the December 2024 crash, &lt;strong&gt;two officials were fired&lt;/strong&gt; as scapegoats:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Daniel Teplizky&lt;/strong&gt; — Subdirector of Studies and Development (replaced by Paulo Ulloa Cifuentes)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Jaime Lira&lt;/strong&gt; — NSI Project Coordinator (replaced by Mauricio Godoy Cisternas)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Additionally, &lt;strong&gt;regional director Jorge Zúñiga&lt;/strong&gt; and &lt;strong&gt;head of Institutional Management Julio Parra&lt;/strong&gt; departed after a crisis at Víctor Jara Stadium involving 3,000+ foreigners on the system's debut day.&lt;/p&gt;

&lt;p&gt;Meanwhile, &lt;strong&gt;ANERCICH&lt;/strong&gt; (the workers' union) issued a public statement: &lt;em&gt;"The company IDEMIA was not able to fully implement the system, and workers have had to assume responsibilities that correspond to the company, negatively affecting both their work and public perception."&lt;/em&gt; Undersecretary of Justice &lt;strong&gt;Ernesto Muñoz&lt;/strong&gt; acknowledged "operational difficulties" but claimed 95% operability within weeks — a claim contradicted by months of ongoing failures.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Chile Handed Them $480 Million
&lt;/h2&gt;

&lt;p&gt;The tender process for Chile's identity system was worth &lt;strong&gt;US$480 million&lt;/strong&gt; over 10 years. Investigative outlet CIPER Chile documented what they called &lt;em&gt;"zonas oscuras"&lt;/em&gt; (dark zones) in the process:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A competing Chinese consortium (&lt;strong&gt;Aisino&lt;/strong&gt;) initially won, then was &lt;strong&gt;annulled&lt;/strong&gt; — the contract was re-awarded to IDEMIA&lt;/li&gt;
&lt;li&gt;Competitors (Sonda-Thales) filed lawsuits alleging IDEMIA manipulated pricing&lt;/li&gt;
&lt;li&gt;IDEMIA held &lt;strong&gt;exclusive knowledge of "business rules"&lt;/strong&gt; from the previous contract — a 7-year information advantage no competitor could match&lt;/li&gt;
&lt;li&gt;Chile's &lt;strong&gt;Justice Undersecretary&lt;/strong&gt; previously worked at &lt;strong&gt;ZC Abogados&lt;/strong&gt;, IDEMIA's main legal firm in Chile&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Registro Civil officials flew to France on IDEMIA's dime&lt;/strong&gt; before renewing the contract&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;querella&lt;/strong&gt; was filed against the director who favored the Chinese bid — allegedly linked to IDEMIA itself&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Contraloría (Chile's comptroller) conducted &lt;strong&gt;22 audits&lt;/strong&gt; and still approved the contract. The Contralor and the Fiscal Nacional Económico were summoned to Congress to explain the process — described by El Mostrador as a &lt;em&gt;"teleserie"&lt;/em&gt; (soap opera).&lt;/p&gt;

&lt;h2&gt;
  
  
  The Crash: December 2024
&lt;/h2&gt;

&lt;p&gt;On December 16, 2024, President Boric personally launched the new system. It immediately failed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Nationwide system crashes&lt;/strong&gt; — offices couldn't process documents&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Biometric capture failures&lt;/strong&gt; — fingerprint scanners malfunctioning&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Payment system down&lt;/strong&gt; — cards declined, transactions lost&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data errors&lt;/strong&gt; in issued identity documents&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Visa Waiver broken&lt;/strong&gt; — new passports couldn't process US ESTA applications&lt;/li&gt;
&lt;li&gt;Identity card delivery times went from 30 days to &lt;strong&gt;60+ days&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The workers' union (ANERCICH) publicly blamed IDEMIA for delivering a system that wasn't ready. The Registro Civil fired the officials responsible for the rollout — but &lt;strong&gt;IDEMIA kept the contract&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Technical Stack Behind the Mess
&lt;/h2&gt;

&lt;p&gt;IDEMIA doesn't publish its full stack, but from job listings and technical documentation, we can piece together what Chile's identity infrastructure runs on — and why it keeps breaking.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Backend: IDEMIA Identity Platform
&lt;/h3&gt;

&lt;p&gt;At the core is the &lt;strong&gt;IDEMIA Identity Platform&lt;/strong&gt;, a modular system handling three functions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Identity Proofing&lt;/strong&gt; — document verification, biometric checks, watchlist screening&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Identity Management&lt;/strong&gt; — creation, storage, de-duplication, lifecycle management&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Identity Authentication&lt;/strong&gt; — enrollment and verification across channels&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The platform is described as "API-first" and modular. In practice, the known components include:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Biometric engine&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;MBSS (Multi-Biometric Search Services) — fingerprint, palm, iris, face, tattoo recognition&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Database&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Oracle Database&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Message queue&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;RabbitMQ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Operating system&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Linux&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Workflow integration&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Accenture (custom integration layer)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Backend language&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Java / JEE (confirmed via job postings requiring "Java, JEE platforms and related frameworks")&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Database queries&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;SQL — preferably MS SQL (per job listings), though Oracle is the production DB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cloud options&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AWS or Azure Government (for other deployments — Chile's appears to be on-premise)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Hardware&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;MBSS is "100% software, no proprietary hardware" — runs on COTS (commercial off-the-shelf)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The biometric engine (MBSS) is the same one used by the &lt;strong&gt;FBI's NGI&lt;/strong&gt;, &lt;strong&gt;DoD ABIS&lt;/strong&gt;, and the &lt;strong&gt;State Department&lt;/strong&gt; — trusted by 70%+ of US law enforcement. On paper, it's proven technology. The question is implementation.&lt;/p&gt;

&lt;h3&gt;
  
  
  The ID Card &amp;amp; Passport
&lt;/h3&gt;

&lt;p&gt;The physical documents are where IDEMIA's hardware expertise shows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Identity card&lt;/strong&gt;: Visible chip (NFC-capable), 32 security features, Braille initials, multibiometric data (fingerprint + face + iris)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Passport&lt;/strong&gt;: 70 security features, 50 pages, blue turquí cover&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Digital ID&lt;/strong&gt;: Mobile app with encrypted data signed by the backend, stored on-device, requiring user authorization to share&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;strong&gt;decadactilar capture&lt;/strong&gt; (10-finger scanning) uses IDEMIA's proprietary biometric devices. These were among the first things to fail — workers reported malfunctioning scanners and capture interface crashes from day one.&lt;/p&gt;

&lt;h3&gt;
  
  
  The "Core Principal" — Single Point of Failure
&lt;/h3&gt;

&lt;p&gt;In November 2025, the entire system went down &lt;strong&gt;again&lt;/strong&gt; nationwide. The cause? An update to what the Registro Civil called the &lt;strong&gt;"Core Principal"&lt;/strong&gt; — the main processing engine of the system.&lt;/p&gt;

&lt;p&gt;This suggests a &lt;strong&gt;monolithic architecture&lt;/strong&gt; or at least a critical central component with no graceful failover. When the Core Principal breaks, everything breaks — every office, every consulate, every online service. No circuit breakers, no canary deployments, no rolling updates. Just a nationwide outage from a single update.&lt;/p&gt;

&lt;h3&gt;
  
  
  The App Ecosystem: A UX Disaster
&lt;/h3&gt;

&lt;p&gt;The citizen-facing side is fragmented across &lt;strong&gt;multiple disconnected apps&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;App&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;th&gt;Play Store Rating&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Identificación Digital&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Digital ID on phone&lt;/td&gt;
&lt;td&gt;1.0 stars&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CivilDigital App&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Certificates and services&lt;/td&gt;
&lt;td&gt;Poor ratings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Registro e Identidad&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ID card reprinting&lt;/td&gt;
&lt;td&gt;Poor ratings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CedulApp&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ID card activation&lt;/td&gt;
&lt;td&gt;Poor ratings&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Users need to download &lt;strong&gt;multiple apps&lt;/strong&gt; to complete a single workflow. Certificates fail to download. Connections drop mid-transaction. In 2020, a security researcher demonstrated they could obtain another person's &lt;strong&gt;Clave Única&lt;/strong&gt; (national digital key) using only their RUT number and a photo from the internet — exposing critical flaws in the facial recognition authentication.&lt;/p&gt;

&lt;h3&gt;
  
  
  The US Visa Waiver Fiasco
&lt;/h3&gt;

&lt;p&gt;Perhaps the most embarrassing technical failure: the new passport system &lt;strong&gt;couldn't properly encode certain characters&lt;/strong&gt;, causing Chilean passports to fail validation on the US &lt;strong&gt;ESTA&lt;/strong&gt; (Electronic System for Travel Authorization) platform. This threatened Chile's participation in the entire US Visa Waiver program — a diplomatic incident caused by a character encoding bug.&lt;/p&gt;

&lt;h3&gt;
  
  
  What This Tells Us
&lt;/h3&gt;

&lt;p&gt;The stack itself isn't inherently bad — Oracle, Java, Linux, RabbitMQ are battle-tested. MBSS powers the FBI. The problem is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Implementation quality&lt;/strong&gt; — proven components assembled poorly, with no proper load testing or failover&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monolithic "Core Principal"&lt;/strong&gt; — a single point of failure for an entire country's identity system&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No gradual rollout&lt;/strong&gt; — launched nationwide on day one instead of phased regional deployment&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fragmented client apps&lt;/strong&gt; — multiple disconnected apps instead of a single unified platform&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Character encoding failures&lt;/strong&gt; — basic internationalization bugs in a system that handles names from dozens of nationalities&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IDEMIA charged ~US$226 million&lt;/strong&gt; for this implementation — paid in 106 installments based on documents issued&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For a company with 3,000+ engineers and 50+ cryptography experts, the failures aren't about capability. They're about what happens when a corruption-prone private equity portfolio company prioritizes contract extraction over engineering excellence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Still Broken in 2025-2026
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;February 2025&lt;/strong&gt;: Users still reporting delays, portal crashes, document losses&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;November 2025&lt;/strong&gt;: Another nationwide outage from a "Core Principal" update&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;December 2025&lt;/strong&gt;: Claims of a &lt;strong&gt;data breach affecting 10 million Chileans&lt;/strong&gt; — Registro Civil denied it&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;March 2026&lt;/strong&gt;: Intermittent failures continue&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Private Equity Exit
&lt;/h2&gt;

&lt;p&gt;Here's where it gets worse. While Chile struggles with a broken system, IDEMIA's owners are cashing out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Advent International sold IDEMIA's Smart Identity division&lt;/strong&gt; (the one making Chile's IDs) to &lt;strong&gt;IN Groupe&lt;/strong&gt;, a French state-owned company — deal closed July 2025&lt;/li&gt;
&lt;li&gt;Advent is now selling &lt;strong&gt;IDEMIA Public Security&lt;/strong&gt; for &lt;strong&gt;€2-3 billion&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Chile contracted IDEMIA but is now dependent on &lt;strong&gt;a completely different entity&lt;/strong&gt; it never chose&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The classic private equity playbook: &lt;strong&gt;acquire → win government contracts → extract value → sell → leave the mess behind&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Nobody Goes to Jail
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mechanism&lt;/th&gt;
&lt;th&gt;How It Protects Individuals&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Corporate fines&lt;/td&gt;
&lt;td&gt;The company pays, not the decision-makers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DPAs / CJIPs&lt;/td&gt;
&lt;td&gt;Deferred prosecution deals — no trial, no names&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mergers &amp;amp; rebranding&lt;/td&gt;
&lt;td&gt;Oberthur → OT-Morpho → IDEMIA — the corrupt entity "doesn't exist"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PE sales&lt;/td&gt;
&lt;td&gt;Advent buys, profits, sells — liability stays with the old entity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Jurisdictional gaps&lt;/td&gt;
&lt;td&gt;Bribes in Bangladesh, company in France, owned by US PE — who prosecutes?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"Internal accountability"&lt;/td&gt;
&lt;td&gt;Companies claim they fired people internally — no criminal referral&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;In the Bangladesh case, &lt;strong&gt;4 former executives&lt;/strong&gt; were flagged for separate prosecution. There is no public record of convictions.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Bottom Line
&lt;/h2&gt;

&lt;p&gt;A company sanctioned by the World Bank for corruption won a half-billion-dollar contract to build the identity system of an entire country. The system broke. The owners sold and walked away with billions. The executives faced no public consequences. And 19 million Chileans are left with an unreliable identity infrastructure run by an entity they never chose.&lt;/p&gt;

&lt;p&gt;This isn't a bug. It's the system working as designed — just not for citizens.&lt;/p&gt;




&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Chile Registro Civil Crisis
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.ciperchile.cl/2020/11/06/las-zonas-oscuras-de-la-licitacion-de-cedulas-y-pasaportes-concurso-involucra-us480-millones/" rel="noopener noreferrer"&gt;CIPER Chile: Zonas oscuras de la licitación (US$480M)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.ciperchile.cl/2008/03/17/graves-irregularidades-en-millonaria-licitacion-del-registro-civil/" rel="noopener noreferrer"&gt;CIPER Chile: Graves irregularidades en licitación (2008)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.emol.com/noticias/Nacional/2024/12/20/1152000/registro-civil-sistema-caido-intermitencia.html" rel="noopener noreferrer"&gt;Emol: Registro Civil sistema caído (Dec 2024)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.latercera.com/nacional/noticia/lunes-a-tres-meses-de-la-crisis-del-registro-civil-nuevo-sistema-entrega-20000-documentos-al-dia-pero-persisten-criticas-por-fallas-y-demoras/" rel="noopener noreferrer"&gt;La Tercera: A tres meses de la crisis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.latercera.com/nacional/noticia/tras-crisis-de-la-herramienta-registro-civil-desvincula-a-encargados-del-nuevo-sistema-de-identificacion/VHT3EEZTKBE4VE7CKOVZ2ADXLU/" rel="noopener noreferrer"&gt;La Tercera: Registro Civil desvincula encargados del NSI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cooperativa.cl/noticias/pais/servicios-publicos/registro-civil/registro-civil-usuarios-denuncian-retrasos-en-cedulas-y-caidas-del/2025-02-13/141906.html" rel="noopener noreferrer"&gt;Cooperativa: Retrasos y caídas Feb 2025&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.t13.cl/noticia/nacional/actualizacion-programa-del-registro-civil-dejo-sin-sistema-desde-viernes-24-11-2025" rel="noopener noreferrer"&gt;T13: Actualización Nov 2025 dejó sin sistema&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.emol.com/noticias/Nacional/2024/12/19/1151840/denuncia-caida-sistema-registro-civil.html" rel="noopener noreferrer"&gt;Emol: Documentos no validados (Dec 2024)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.biobiochile.cl/noticias/nacional/chile/2024/12/20/registro-civil-justifica-intermitencias-por-gran-envergadura-de-nuevo-sistema-de-identidad.shtml" rel="noopener noreferrer"&gt;BioBioChile: Registro Civil justifica intermitencias&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://latamgremial.com/funcionarios-del-registro-civil-de-chile-denuncian-fallas-en-el-nuevo-sistema-de-identificacion/" rel="noopener noreferrer"&gt;Latam Gremial: Funcionarios denuncian fallas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.biobiochile.cl/noticias/nacional/chile/2025/12/20/registro-civil-descarta-vulneracion-de-sistema-y-filtracion-de-los-datos-de-10-millones-de-personas.shtml" rel="noopener noreferrer"&gt;BioBioChile: Descarta filtración de datos de 10M personas&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  People &amp;amp; Investigations
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://interferencia.cl/articulos/subsecretario-de-justicia-trabajo-en-bufete-que-impugno-licitacion-en-el-registro-civil-y" rel="noopener noreferrer"&gt;Interferencia: Subsecretario de Justicia trabajó en bufete de IDEMIA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://interferencia.cl/articulos/jefes-del-registro-civil-viajaron-francia-invitados-por-idemia-empresa-que-renovo-contrato" rel="noopener noreferrer"&gt;Interferencia: Jefes del Registro Civil viajaron a Francia invitados por IDEMIA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.latercera.com/la-tercera-pm/noticia/el-mes-negro-del-nuevo-sistema-de-identificacion-la-clave-de-la-crisis-del-registro-civil/R7VSVK274ZCJJPGQIGSCONYRPU/" rel="noopener noreferrer"&gt;La Tercera: El "mes negro" del nuevo sistema de identificación&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.biobiochile.cl/noticias/nacional/chile/2025/01/07/revelan-que-encargados-del-nuevo-sistema-de-identificacion-fueron-desvinculados-por-el-registro-civil.shtml" rel="noopener noreferrer"&gt;BioBioChile: Encargados del NSI desvinculados&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.t13.cl/noticia/nacional/aseguran-encargados-nuevo-sistema-identificacion-fueron-despedidos-registro-civil7-1-2025" rel="noopener noreferrer"&gt;T13: Registro Civil realiza cambios en equipo del NSI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.elmostrador.cl/dia/2021/10/18/presentan-querella-contra-director-del-registro-civil-por-privilegiar-a-firma-china-aisino-en-licitacion-de-pasaportes/" rel="noopener noreferrer"&gt;El Mostrador: Querella contra director por privilegiar a Aisino&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.df.cl/empresas/industria/aisino-acusa-vinculo-de-idemia-con-querella-presentada-en-contra-del" rel="noopener noreferrer"&gt;Diario Financiero: Aisino acusa vínculo de IDEMIA con querella&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.latercera.com/pulso/noticia/sergio-mierzejewski-el-director-del-registro-civil-presento-su-renuncia-al-cargo/KNEDHTCPJBFJLLZ42TUL7DCCKE/" rel="noopener noreferrer"&gt;La Tercera: Mierzejewski renuncia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.eldesconcierto.cl/nacional/2021/11/24/el-olor-a-lobby-en-la-polemica-licitacion-de-pasaportes-del-registro-civil.html" rel="noopener noreferrer"&gt;El Desconcierto: El olor a lobby en la licitación de pasaportes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.elmostrador.cl/noticias/pais/2021/10/20/teleserie-del-registro-civil-no-se-acaba-contralor-y-fiscal-nacional-economico-seran-invitados-a-comision-de-la-camara-para-abordar-la-polemica-licitacion/" rel="noopener noreferrer"&gt;El Mostrador: Contralor y Fiscal invitados a comisión por la "teleserie"&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.ex-ante.cl/el-flanco-para-el-ministro-gajardo-que-abrieron-las-irregularidades-detectadas-por-contraloria-en-gendarmeria-y-el-registro-civil/" rel="noopener noreferrer"&gt;Ex-Ante: Irregularidades ponen en tela de juicio a ministro Gajardo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://fcpablog.com/2012/09/10/safran-fined-for-nigeria-bribes/" rel="noopener noreferrer"&gt;Safran fined for Nigeria bribes — FCPA Blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.hurriyetdailynews.com/frances-safran-fined-500000-euros-for-nigeria-bribery-29457" rel="noopener noreferrer"&gt;Hürriyet: Safran fined €500K for Nigeria bribery&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://netra.news/2025/general-moustache-tarique-siddique/" rel="noopener noreferrer"&gt;Netra News: "Finding G" — the general behind Bangladesh bribes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://anef.cl/comunicaciones/anercich-emite-carta-abierta-para-los-as-convencionales-por-la-soberania-de-datos-y-la-funcion-publica/" rel="noopener noreferrer"&gt;ANERCICH: Carta abierta por soberanía de datos&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  IDEMIA Tender Irregularities
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://interferencia.cl/articulos/idemia-se-beneficia-de-retraso-del-registro-civil-en-aplicar-nuevo-sistema-de" rel="noopener noreferrer"&gt;Interferencia: IDEMIA se beneficia del retraso ($70B vs $22B CLP)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://interferencia.cl/articulos/la-abultada-multa-que-impuso-el-registro-civil-la-empresa-proveedora-del-sistema-de" rel="noopener noreferrer"&gt;Interferencia: Multa de $164M CLP a IDEMIA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://interferencia.cl/articulos/el-prontuario-de-los-postulantes-la-millonaria-licitacion-del-registro-civil-para-generar" rel="noopener noreferrer"&gt;Interferencia: Prontuario de los postulantes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.infobae.com/america/america-latina/2021/09/01/chile-denuncian-irregularidades-en-la-licitacion-de-los-pasaportes-y-cedulas-de-identidad-que-favorecerian-a-una-empresa-china/" rel="noopener noreferrer"&gt;Infobae: Irregularidades en licitación favorecerían empresa china&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.biobiochile.cl/noticias/nacional/chile/2021/11/19/registro-civil-readjudica-licitacion-de-cedulas-y-pasaportes-a-idemia-tras-anular-oferta-de-aisino.shtml" rel="noopener noreferrer"&gt;BioBioChile: Re-adjudicación a IDEMIA tras anular oferta china&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.biobiochile.cl/especial/bbcl-investiga/noticias/cronicas/2022/02/10/licitacion-cedulas-y-pasaportes-del-registro-civil-contraloria-toma-razon-con-alcances-al-contrato.shtml" rel="noopener noreferrer"&gt;BioBioChile: Contraloría toma razón con alcances&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.diarioelheraldo.cl/noticia/idemia-la-empresa-francesa-detras-del-cuestionado-nuevo-sistema-de-identificacion-del-registro-civil" rel="noopener noreferrer"&gt;Diario El Heraldo: IDEMIA detrás del cuestionado sistema&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.df.cl/empresas/industria/registro-civil-e-idemia-sellan-contrato-de-nuevo-modelo-de-identificacion" rel="noopener noreferrer"&gt;Diario Financiero: Contraloría toma razón de contrato&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  IDEMIA Corruption History
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.worldbank.org/en/news/press-release/2017/11/30/world-bank-announces-settlement-with-oberthur-technologies-sa" rel="noopener noreferrer"&gt;World Bank: Settlement with Oberthur Technologies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://fcpablog.com/2017/12/01/world-bank-debars-french-digital-security-firm/" rel="noopener noreferrer"&gt;FCPA Blog: World Bank debars French digital security firm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.orishas-finance.com/actualite/corruption-d-agent-public-en-angola-idemia-france-paie-une-amende-de-15-5-millions-d-euros-80e42389?lang=en" rel="noopener noreferrer"&gt;Orishas Finance: IDEMIA Angola fine €15.5M&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://outlook.skan1.fr/2022/09/01/cjip-idemia-france-pour-des-faits-de-corruption-agent-public-apporteur-affaires-au-bangladesh/" rel="noopener noreferrer"&gt;CJIP IDEMIA France / Bangladesh corruption&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://thehimalayantimes.com/nepal/french-firm-idemia-paid-nepali-brokers-through-foreign-accounts-to-secure-lucrative-contracts-complaint-says" rel="noopener noreferrer"&gt;Himalayan Times: IDEMIA Nepal bribery complaint&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://interferencia.cl/articulos/carabineros-adjudico-sistema-de-control-de-identidad-empresa-cuestionada-por-el-registro" rel="noopener noreferrer"&gt;Interferencia: Carabineros adjudicó sistema a empresa cuestionada&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  IDEMIA Ownership &amp;amp; Corporate Structure
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/IDEMIA" rel="noopener noreferrer"&gt;IDEMIA - Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.idemia.com/governance" rel="noopener noreferrer"&gt;IDEMIA Governance&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.biometricupdate.com/202507/advent-reportedly-prepping-idemia-public-security-sale-for-up-to-e3-billion" rel="noopener noreferrer"&gt;Biometric Update: Advent prepping IDEMIA Public Security sale (€3B)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://news.bloomberglaw.com/private-equity/advent-said-to-near-sale-of-idemia-biometric-unit-to-in-groupe" rel="noopener noreferrer"&gt;Bloomberg: Advent sells IDEMIA biometric unit to IN Groupe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.idemia.com/news/idemia-strengthens-its-governance-support-groups-transformation-2025-06-03" rel="noopener noreferrer"&gt;IDEMIA: Strengthens governance (2025)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Advent_International" rel="noopener noreferrer"&gt;Advent International - Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Technical Stack &amp;amp; Architecture
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.idemia.com/wp-content/uploads/2021/02/idemia-identity-platform-brochure-202010.pdf" rel="noopener noreferrer"&gt;IDEMIA Identity Platform brochure (PDF)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.idemia-nss.com/idemia-identity-platform/" rel="noopener noreferrer"&gt;IDEMIA Identity Platform — NSS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.idemia.com/identity-management-system" rel="noopener noreferrer"&gt;IDEMIA: Identity Management System&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.idemia.com/mbss" rel="noopener noreferrer"&gt;IDEMIA MBSS: Core multi-biometric engine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.idemia.com/mbis" rel="noopener noreferrer"&gt;IDEMIA MBIS: Biometric identification solution&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.idemia.com/mbis-cloud" rel="noopener noreferrer"&gt;IDEMIA MBIS Cloud on Microsoft Azure/AWS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://appsource.microsoft.com/en-us/product/web-apps/idemia1622597156158.idemia_afis_abis_system" rel="noopener noreferrer"&gt;IDEMIA MBIS on Microsoft AppSource (Oracle, RabbitMQ, Linux stack)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.biometricupdate.com/202109/idemia-unveils-saas-abis-to-bring-fingerprint-biometrics-to-smaller-agencies" rel="noopener noreferrer"&gt;Biometric Update: IDEMIA SaaS ABIS for fingerprint biometrics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.biometricupdate.com/202208/chile-launches-biometric-identification-system-aims-to-tackle-organized-crime" rel="noopener noreferrer"&gt;Biometric Update: Chile launches biometric identification system&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.biometricupdate.com/202204/idemia-signs-decade-long-digital-id-services-contract-with-chile" rel="noopener noreferrer"&gt;Biometric Update: IDEMIA signs decade-long digital ID contract with Chile&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.idemia.com/idemia-modernizes-chiles-identity-management-and-document-production-system" rel="noopener noreferrer"&gt;IDEMIA: Modernizes Chile's Identity Management (PDF)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.idemia.com/wp-content/uploads/2022/02/system-based-approach-to-digital-id-idemia-brochure-202202.pdf" rel="noopener noreferrer"&gt;IDEMIA: System-based approach to digital ID (PDF)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://uchile.cl/noticias/225993/carnet-y-pasaporte-digital-chile-a-la-vanguardia-de-la-identificacion" rel="noopener noreferrer"&gt;Universidad de Chile: Carnet y Pasaporte Digital&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://play.google.com/store/apps/details?id=com.cl.srcei.iddigital&amp;amp;hl=en_US" rel="noopener noreferrer"&gt;Google Play: Identificación Digital app (1.0 stars)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/@lukasrencoret/civil-digital-un-desastre-funcional-9b457bbcfdf6" rel="noopener noreferrer"&gt;Medium: Civil Digital, un desastre funcional — Lukas Rencoret&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fayerwayer.com/2020/03/chile-app-registro-civil-viral/" rel="noopener noreferrer"&gt;FayerWayer: El desastre de la app del Registro Civil se vuelve viral&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.emol.com/noticias/Nacional/2025/01/16/1154442/idemia-sistema-identificacion-registro-civil.html" rel="noopener noreferrer"&gt;Emol: IDEMIA detrás del cuestionado NSI (US$226M contract details)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://idtechwire.com/idemia-enhances-interpols-biometric-capabilities-with-new-mbis-5-system/" rel="noopener noreferrer"&gt;IDEMIA: Enhances INTERPOL's biometric capabilities with MBIS 5&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Individual Accountability &amp;amp; Legal Framework
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://yalelawandpolicy.org/coughing-executives-or-rolling-dice-individual-accountability-corporate-corruption" rel="noopener noreferrer"&gt;Yale Law: Individual Accountability for Corporate Corruption&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.icij.org/investigations/ericsson-list/as-us-style-corporate-leniency-deals-for-bribery-and-corruption-go-global-repeat-offenders-are-on-the-rise/" rel="noopener noreferrer"&gt;ICIJ: Repeat offenders on the rise with corporate leniency deals&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://fcpa.stanford.edu/research-reports/20110901-the-fcpa-in-merger-and-acquisition-transactions.pdf" rel="noopener noreferrer"&gt;Stanford FCPA: The FCPA in Merger and Acquisition Transactions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>security</category>
      <category>corruption</category>
      <category>identity</category>
      <category>webdev</category>
    </item>
    <item>
      <title>I built TubeWords — a free tool to transcribe any YouTube video and get an AI summary in seconds</title>
      <dc:creator>krlz</dc:creator>
      <pubDate>Thu, 05 Mar 2026 22:39:12 +0000</pubDate>
      <link>https://open.forem.com/krlz/i-built-tubewords-a-free-tool-to-transcribe-any-youtube-video-and-get-an-ai-summary-in-seconds-bbj</link>
      <guid>https://open.forem.com/krlz/i-built-tubewords-a-free-tool-to-transcribe-any-youtube-video-and-get-an-ai-summary-in-seconds-bbj</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzm6ji0h1r1f7cpk2p3wy.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzm6ji0h1r1f7cpk2p3wy.jpg" alt=" " width="800" height="373"&gt;&lt;/a&gt;Every once in a while you watch a long YouTube video — a conference talk, a tutorial, a podcast — and you just want the gist. Or maybe you want to search through what was actually said. Or save a clean transcript to your notes.&lt;/p&gt;

&lt;p&gt;I kept reaching for a tool like that and kept not finding exactly what I wanted. So I built it.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is TubeWords?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://tubewords.com" rel="noopener noreferrer"&gt;TubeWords&lt;/a&gt;&lt;/strong&gt; is a free, no-signup tool that does two things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Extracts the full transcript&lt;/strong&gt; of any YouTube video, powered by Whisper AI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generates an AI summary&lt;/strong&gt; of the content, so you get the key points without watching the whole thing&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Paste a URL. Get your transcript. Done.&lt;/p&gt;

&lt;p&gt;It supports &lt;strong&gt;timestamps&lt;/strong&gt; or &lt;strong&gt;plain text&lt;/strong&gt; output, so you can grab exactly the format you need — whether you're taking notes, building context for a prompt, or just skimming what was said at minute 12.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why I built it
&lt;/h2&gt;

&lt;p&gt;Honestly? Laziness in the best sense.&lt;/p&gt;

&lt;p&gt;I watch a lot of technical content — conference talks, deep-dive tutorials, dev discussions — and I often want to reference what was said without rewatching. I also found myself copying transcripts into Claude or GPT to get a quick summary, which felt like unnecessary friction.&lt;/p&gt;

&lt;p&gt;I wanted one place where I paste a URL and immediately get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A clean, readable transcript&lt;/li&gt;
&lt;li&gt;A concise summary&lt;/li&gt;
&lt;li&gt;The ability to copy either one with a click&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's it. No accounts. No paywalls. No AI upsell features I'll never use.&lt;/p&gt;




&lt;h2&gt;
  
  
  The tech behind it
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Whisper AI&lt;/strong&gt; for the transcription — it handles accent variety and audio quality better than YouTube's auto-captions in most cases&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Groq&lt;/strong&gt; for the AI summary — fast inference, low latency, genuinely good summaries&lt;/li&gt;
&lt;li&gt;Available in &lt;strong&gt;English and Spanish&lt;/strong&gt; 🇨🇱&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  There's also a CLI 🖥️
&lt;/h2&gt;

&lt;p&gt;If you live in the terminal (like I do when I'm in flow), there's an npm package:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm i &lt;span class="nt"&gt;-g&lt;/span&gt; tubewords
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then just:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;tubewords https://youtube.com/watch?v&lt;span class="o"&gt;=&lt;/span&gt;VIDEO_ID &lt;span class="nt"&gt;-o&lt;/span&gt; notes.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It fetches the transcript, generates the summary, and saves it to a markdown file. Super useful when you want to pipe YouTube content directly into your notes or your own tooling.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;This is v1.0.1 — it works, it's stable, but there's more I want to add:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chapter-aware summaries&lt;/li&gt;
&lt;li&gt;Export to Notion / Obsidian&lt;/li&gt;
&lt;li&gt;Bulk video support (playlists)&lt;/li&gt;
&lt;li&gt;More languages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you have ideas or run into issues, I'd love to hear from you.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://tubewords.com" rel="noopener noreferrer"&gt;tubewords.com&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Built with ♥ by &lt;a href="https://krlz.dev" rel="noopener noreferrer"&gt;krlz.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you find it useful, share it with someone who watches way too many YouTube tutorials. That's probably most of us.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;What's your go-to workflow for taking notes from video content? Drop it in the comments — always curious how other devs handle this.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>tutorial</category>
      <category>webdev</category>
    </item>
    <item>
      <title>We built a pet medication tracker because every other app failed us</title>
      <dc:creator>krlz</dc:creator>
      <pubDate>Wed, 04 Mar 2026 02:13:01 +0000</pubDate>
      <link>https://open.forem.com/krlz/we-built-a-pet-medication-tracker-because-every-other-app-failed-us-aho</link>
      <guid>https://open.forem.com/krlz/we-built-a-pet-medication-tracker-because-every-other-app-failed-us-aho</guid>
      <description>&lt;p&gt;Last year, my partner and I adopted a dog 🐶 &lt;strong&gt;(keep reading, pics at the end!)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And with him came a lot of love... and a lot of responsibility.&lt;br&gt;
Vaccines, medications, checkups — all on time.&lt;/p&gt;

&lt;p&gt;I first tried using Google Calendar, but it quickly turned into clutter: work meetings, birthdays, reminders — everything mixed together, and pet-related things got lost.&lt;/p&gt;

&lt;p&gt;Then I tried many pet apps, but something was always off: some were overdesigned and hard to read, others missed notifications.&lt;/p&gt;

&lt;p&gt;At some point we said: hey, we're developers after all.&lt;br&gt;
So together with &lt;a href="https://maryaleks.dev" rel="noopener noreferrer"&gt;Marina&lt;/a&gt;, as a family project, we decided to build the app we actually needed.&lt;/p&gt;

&lt;p&gt;That's how &lt;a href="https://play.google.com/store/apps/details?id=com.krlz.zoominder&amp;amp;hl=en" rel="noopener noreferrer"&gt;ZooMinder&lt;/a&gt; was born — a simple, clear app to track your pet's meds, vaccines, and checkups, without noise or clutter.&lt;/p&gt;
&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://zoo-minder.com/" rel="noopener noreferrer"&gt;ZooMinder&lt;/a&gt; focuses on one thing and does it well: keeping your pet's health schedule organized.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Multiple pets&lt;/strong&gt; — Add all your pets with photos, and birthdate&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Treatments &amp;amp; medications&lt;/strong&gt; — Track meds with dosage, frequency (daily, weekly, custom intervals), and time-specific doses&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vet appointments&lt;/strong&gt; — Save clinic info, vet name, phone, and address so everything is in one place&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Upcoming doses&lt;/strong&gt; — A clear timeline of what's coming next, across all your pets&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;History&lt;/strong&gt; — Full timeline of past doses and appointments per pet&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local notifications&lt;/strong&gt; — 'Bark' sound alerts so you never miss a dose, even when the app is closed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Offline-first&lt;/strong&gt; — Works without internet. Data syncs to the cloud when you're back online&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  The tech behind it
&lt;/h2&gt;

&lt;p&gt;We built it with &lt;strong&gt;Flutter&lt;/strong&gt; (Dart 3.10+), targeting Android first.&lt;/p&gt;

&lt;p&gt;Here's the stack:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Tech&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Framework&lt;/td&gt;
&lt;td&gt;Flutter&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Local DB&lt;/td&gt;
&lt;td&gt;SQLite (sqflite)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Backend &amp;amp; Auth&lt;/td&gt;
&lt;td&gt;Supabase&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Notifications&lt;/td&gt;
&lt;td&gt;flutter_local_notifications + custom sound&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Navigation&lt;/td&gt;
&lt;td&gt;go_router&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;i18n&lt;/td&gt;
&lt;td&gt;Flutter's intl (English + Spanish)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;In-app purchases&lt;/td&gt;
&lt;td&gt;in_app_purchase&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sync&lt;/td&gt;
&lt;td&gt;Custom offline-first sync service&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  Offline-first architecture
&lt;/h3&gt;

&lt;p&gt;This was the most interesting technical challenge. The app stores everything locally in SQLite first. Every record has a &lt;code&gt;synced&lt;/code&gt; flag. When the device comes back online, a &lt;code&gt;SyncService&lt;/code&gt; pushes unsynced records to Supabase and pulls remote changes — handling conflicts with timestamps (&lt;code&gt;updated_at&lt;/code&gt;).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Every model carries its sync state&lt;/span&gt;
&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Treatment&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;synced&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="n"&gt;DateTime&lt;/span&gt; &lt;span class="n"&gt;updatedAt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This means the app is fully usable on a plane, in a rural area, or anywhere without signal. Your pet's schedule doesn't depend on your WiFi.&lt;/p&gt;

&lt;h3&gt;
  
  
  Notifications that actually work
&lt;/h3&gt;

&lt;p&gt;We created dedicated Android notification channels for medications and appointments, with a custom notification sound. The service schedules up to 3 upcoming notifications per treatment, recalculating whenever treatments are added or modified.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;_medicationChannel&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;AndroidNotificationChannel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="s"&gt;'medication_reminders_v2'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s"&gt;'Medication Reminders'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nl"&gt;importance:&lt;/span&gt; &lt;span class="n"&gt;Importance&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;high&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nl"&gt;sound:&lt;/span&gt; &lt;span class="n"&gt;_customSound&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nl"&gt;playSound:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What we learned
&lt;/h2&gt;

&lt;p&gt;Building a "simple" app is harder than it looks. Some takeaways:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Offline-first is worth it but painful&lt;/strong&gt; — Sync logic with conflict resolution took more time than all the UI combined. But the UX payoff is huge.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Notifications are a minefield&lt;/strong&gt; — Between Android permission models, battery optimization killing background processes, and timezone handling... just scheduling a daily reminder at 8am is surprisingly complex.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Scope creep is real&lt;/strong&gt; — We started with "just track medications" and ended up with appointment management, dose history timelines, vet clinic storage, premium subscriptions, and multi-language support. Saying "no" to features is a skill.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Family projects keep you honest&lt;/strong&gt; — When your co-developer is also your partner and your first user, feedback is... immediate. And brutally honest. 😄&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What's next 🚀
&lt;/h2&gt;

&lt;p&gt;We're just getting started. Here's what we're planning:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Family plans&lt;/strong&gt; — Share pets between household members so everyone can track medications and appointments from their own account. No more "did you give him the pill?" texts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Assign responsibilities&lt;/strong&gt; — Delegate tasks to family members. Mom handles the morning dose, dad takes the evening one. Everyone knows what they're responsible for.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vet-oriented tools&lt;/strong&gt; — We want to build features that integrate well with ZooMinder and give vets a better way to stay connected with pet owners — think shared treatment plans, visit summaries, and more.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We believe pet care is a team effort, and ZooMinder should reflect that.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;ZooMinder is available on the Google Play Store. If you have pets and struggle to keep track of their medications and vet visits, give it a try.&lt;/p&gt;

&lt;p&gt;We'd love your feedback — and if you're a Flutter dev, we're happy to chat about the offline-first patterns we used.&lt;/p&gt;

&lt;h2&gt;
  
  
  Want to help? 🙌
&lt;/h2&gt;

&lt;p&gt;If you have suggestions, ideas, or found a bug — feel free to send me a DM here on dev.to! I'm always open to feedback.&lt;/p&gt;

&lt;p&gt;Also, if you'd like to help as a &lt;strong&gt;beta tester&lt;/strong&gt;, I'd really appreciate it. In exchange for your collaboration and honest feedback, I can give you &lt;strong&gt;full access to the premium version&lt;/strong&gt; of the app. Just reach out and we'll get you set up.&lt;/p&gt;

&lt;p&gt;Every bit of help makes ZooMinder better for all pet parents out there. 💪&lt;/p&gt;




&lt;p&gt;As I promised some pics of the little guy who started it all. Here he is 🐾&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz5hazv5cnwiq4bdx94wp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz5hazv5cnwiq4bdx94wp.png" alt=" " width="601" height="1287"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4smwf0b1oja3jmbmk4b7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4smwf0b1oja3jmbmk4b7.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8y8l6ibqqqrghq1r0wyc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8y8l6ibqqqrghq1r0wyc.png" alt=" " width="601" height="1287"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F49dx1heydfu0zb4pnw40.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F49dx1heydfu0zb4pnw40.png" alt=" " width="800" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F78b73rh33yalk1dsfvs9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F78b73rh33yalk1dsfvs9.png" alt=" " width="601" height="1287"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;#flutter #flutterdev #dart #mobiledev #android #sideproject #indiedev&lt;br&gt;
  #buildinpublic #petcare #pettech #supabase #offlinefirst #petparents #devlife&lt;br&gt;
  #familyproject&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Built with Flutter, Supabase, and a lot of dog hair on the keyboard.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Have a great day! 👋🐾&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>mobile</category>
      <category>pets</category>
    </item>
    <item>
      <title>Bug Bounty Hunting in 2026</title>
      <dc:creator>krlz</dc:creator>
      <pubDate>Sun, 11 Jan 2026 01:06:56 +0000</pubDate>
      <link>https://open.forem.com/krlz/bug-bounty-hunting-guide-2026-from-zero-to-paid-security-researcher-5c82</link>
      <guid>https://open.forem.com/krlz/bug-bounty-hunting-guide-2026-from-zero-to-paid-security-researcher-5c82</guid>
      <description>&lt;p&gt;A complete guide to start earning money through bug bounty hunting.&lt;/p&gt;




&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;What is Bug Bounty?&lt;/li&gt;
&lt;li&gt;Prerequisites&lt;/li&gt;
&lt;li&gt;Setting Up Your Environment&lt;/li&gt;
&lt;li&gt;Learning Path&lt;/li&gt;
&lt;li&gt;Choosing a Platform&lt;/li&gt;
&lt;li&gt;Finding Your First Bug&lt;/li&gt;
&lt;li&gt;Writing a Good Report&lt;/li&gt;
&lt;li&gt;Common Vulnerability Types&lt;/li&gt;
&lt;li&gt;Tools&lt;/li&gt;
&lt;li&gt;Tips for Success&lt;/li&gt;
&lt;li&gt;Resources&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  What is Bug Bounty?
&lt;/h2&gt;

&lt;p&gt;Bug bounty programs reward security researchers for finding and responsibly reporting vulnerabilities in software, websites, and applications. Companies pay anywhere from $50 to $2,000,000+ depending on the severity of the bug.&lt;/p&gt;

&lt;h3&gt;
  
  
  Earnings Potential
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Level&lt;/th&gt;
&lt;th&gt;Monthly Income&lt;/th&gt;
&lt;th&gt;Time to Reach&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Beginner&lt;/td&gt;
&lt;td&gt;$0-500&lt;/td&gt;
&lt;td&gt;0-12 months&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Intermediate&lt;/td&gt;
&lt;td&gt;$2,000-5,000&lt;/td&gt;
&lt;td&gt;1-2 years&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Advanced&lt;/td&gt;
&lt;td&gt;$8,000-15,000&lt;/td&gt;
&lt;td&gt;2-3 years&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Elite&lt;/td&gt;
&lt;td&gt;$20,000+&lt;/td&gt;
&lt;td&gt;3+ years&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Required Knowledge
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Basic understanding of how the web works (HTTP, DNS, cookies, sessions)&lt;/li&gt;
&lt;li&gt;HTML, CSS, JavaScript fundamentals&lt;/li&gt;
&lt;li&gt;Basic programming (Python recommended)&lt;/li&gt;
&lt;li&gt;Linux command line basics&lt;/li&gt;
&lt;li&gt;Networking fundamentals (TCP/IP, ports, protocols)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Mindset
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Patience (most hunters quit in the first 6 months)&lt;/li&gt;
&lt;li&gt;Curiosity and persistence&lt;/li&gt;
&lt;li&gt;Willingness to learn continuously&lt;/li&gt;
&lt;li&gt;Ethical behavior (never test without permission)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Setting Up Your Environment
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Operating System
&lt;/h3&gt;

&lt;p&gt;Use a Linux-based OS for bug hunting. Recommended: Kali Linux, Parrot OS, or Ubuntu/Debian with tools installed manually.&lt;/p&gt;

&lt;h3&gt;
  
  
  Essential Tools Installation
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Update system&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt upgrade &lt;span class="nt"&gt;-y&lt;/span&gt;

&lt;span class="c"&gt;# Install basic tools&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; git curl wget python3 python3-pip nmap

&lt;span class="c"&gt;# Install Go (needed for many tools)&lt;/span&gt;
wget https://go.dev/dl/go1.21.0.linux-amd64.tar.gz
&lt;span class="nb"&gt;sudo tar&lt;/span&gt; &lt;span class="nt"&gt;-C&lt;/span&gt; /usr/local &lt;span class="nt"&gt;-xzf&lt;/span&gt; go1.21.0.linux-amd64.tar.gz
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'export PATH=$PATH:/usr/local/go/bin:~/go/bin'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; ~/.bashrc
&lt;span class="nb"&gt;source&lt;/span&gt; ~/.bashrc

&lt;span class="c"&gt;# Install subfinder (subdomain enumeration)&lt;/span&gt;
go &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest

&lt;span class="c"&gt;# Install httpx (HTTP probing)&lt;/span&gt;
go &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; github.com/projectdiscovery/httpx/cmd/httpx@latest

&lt;span class="c"&gt;# Install nuclei (vulnerability scanner)&lt;/span&gt;
go &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest

&lt;span class="c"&gt;# Install ffuf (fuzzing)&lt;/span&gt;
go &lt;span class="nb"&gt;install &lt;/span&gt;github.com/ffuf/ffuf/v2@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Browser Setup
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Install Firefox or Chrome&lt;/li&gt;
&lt;li&gt;Add extensions: FoxyProxy, Wappalyzer, Cookie Editor, HackBar&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Configure Burp Suite
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Download from portswigger.net/burp/communitydownload&lt;/li&gt;
&lt;li&gt;Set proxy listener to 127.0.0.1:8080&lt;/li&gt;
&lt;li&gt;Configure browser to use this proxy&lt;/li&gt;
&lt;li&gt;Install Burp's CA certificate in browser&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Learning Path
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Phase 1: Foundations
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Complete these free courses:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PortSwigger Web Security Academy (FREE, essential)&lt;/li&gt;
&lt;li&gt;TryHackMe - Bug Bounty Path&lt;/li&gt;
&lt;li&gt;HackTheBox Academy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Learn OWASP Top 10:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Injection (SQL, Command, LDAP)&lt;/li&gt;
&lt;li&gt;Broken Authentication&lt;/li&gt;
&lt;li&gt;Sensitive Data Exposure&lt;/li&gt;
&lt;li&gt;XML External Entities (XXE)&lt;/li&gt;
&lt;li&gt;Broken Access Control&lt;/li&gt;
&lt;li&gt;Security Misconfiguration&lt;/li&gt;
&lt;li&gt;Cross-Site Scripting (XSS)&lt;/li&gt;
&lt;li&gt;Insecure Deserialization&lt;/li&gt;
&lt;li&gt;Using Components with Known Vulnerabilities&lt;/li&gt;
&lt;li&gt;Insufficient Logging and Monitoring&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Phase 2: Practice
&lt;/h3&gt;

&lt;p&gt;Practice on legal targets: DVWA, bWAPP, OWASP WebGoat, HackTheBox machines, TryHackMe rooms, PentesterLab&lt;/p&gt;

&lt;h3&gt;
  
  
  Phase 3: Real Targets
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Start with VDPs (Vulnerability Disclosure Programs)&lt;/li&gt;
&lt;li&gt;Move to paid bug bounty programs&lt;/li&gt;
&lt;li&gt;Focus on less popular targets (less competition)&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Choosing a Platform
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Platform&lt;/th&gt;
&lt;th&gt;Best For&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;HackerOne&lt;/td&gt;
&lt;td&gt;Largest program variety&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bugcrowd&lt;/td&gt;
&lt;td&gt;Beginner-friendly&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Intigriti&lt;/td&gt;
&lt;td&gt;European programs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;YesWeHack&lt;/td&gt;
&lt;td&gt;European programs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Immunefi&lt;/td&gt;
&lt;td&gt;Crypto/Web3 (high payouts)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Synack&lt;/td&gt;
&lt;td&gt;Invite-only, higher pay&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Program Selection Tips
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Start with programs that have broad scope&lt;/li&gt;
&lt;li&gt;Look for programs with good response times&lt;/li&gt;
&lt;li&gt;Avoid programs with many hunters (high competition)&lt;/li&gt;
&lt;li&gt;New programs often have more low-hanging fruit&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Finding Your First Bug
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Reconnaissance
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Find subdomains&lt;/span&gt;
subfinder &lt;span class="nt"&gt;-d&lt;/span&gt; target.com &lt;span class="nt"&gt;-o&lt;/span&gt; subdomains.txt

&lt;span class="c"&gt;# Check which are alive&lt;/span&gt;
&lt;span class="nb"&gt;cat &lt;/span&gt;subdomains.txt | httpx &lt;span class="nt"&gt;-o&lt;/span&gt; alive.txt

&lt;span class="c"&gt;# Find interesting endpoints&lt;/span&gt;
&lt;span class="nb"&gt;cat &lt;/span&gt;alive.txt | waybackurls &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; urls.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Map the Application
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Browse the application manually&lt;/li&gt;
&lt;li&gt;Identify all features and functionality&lt;/li&gt;
&lt;li&gt;Note authentication mechanisms&lt;/li&gt;
&lt;li&gt;Find input fields (forms, parameters, headers)&lt;/li&gt;
&lt;li&gt;Check for APIs&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Test for Vulnerabilities
&lt;/h3&gt;

&lt;p&gt;Start with these high-impact bugs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Authentication Issues (Password reset flaws, Account takeover)&lt;/li&gt;
&lt;li&gt;Access Control (IDOR, Privilege escalation)&lt;/li&gt;
&lt;li&gt;Injection (XSS, SQL Injection, Command Injection)&lt;/li&gt;
&lt;li&gt;Business Logic (Price manipulation, Race conditions)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Document Everything
&lt;/h3&gt;

&lt;p&gt;Take screenshots, record HTTP requests/responses, note reproduction steps, save evidence before reporting.&lt;/p&gt;




&lt;h2&gt;
  
  
  Writing a Good Report
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Report Template
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Title:&lt;/strong&gt; [Vulnerability Type] in [Feature/Endpoint] allows [Impact]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Summary:&lt;/strong&gt; Brief description of the vulnerability and its impact.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Critical / High / Medium / Low&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Steps to Reproduce:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to the vulnerable endpoint&lt;/li&gt;
&lt;li&gt;Perform specific action&lt;/li&gt;
&lt;li&gt;Observe the vulnerability&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Proof of Concept:&lt;/strong&gt; Screenshots, videos, code snippets&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impact:&lt;/strong&gt; Explain what an attacker could do&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Recommended Fix:&lt;/strong&gt; Suggest how to fix the issue&lt;/p&gt;




&lt;h2&gt;
  
  
  Common Vulnerability Types
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Cross-Site Scripting (XSS)
&lt;/h3&gt;

&lt;p&gt;Where to look: Search boxes, comment fields, profile fields, URL parameters&lt;/p&gt;

&lt;h3&gt;
  
  
  SQL Injection
&lt;/h3&gt;

&lt;p&gt;Where to look: Login forms, search features, filters, any database queries&lt;/p&gt;

&lt;h3&gt;
  
  
  IDOR (Insecure Direct Object Reference)
&lt;/h3&gt;

&lt;p&gt;Change IDs in requests: GET /api/user/123/profile -&amp;gt; GET /api/user/124/profile&lt;/p&gt;

&lt;h3&gt;
  
  
  Authentication Bugs
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Password reset token leaks&lt;/li&gt;
&lt;li&gt;No rate limiting on login&lt;/li&gt;
&lt;li&gt;Session not invalidated on logout&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Business Logic Flaws
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Negative quantity in cart&lt;/li&gt;
&lt;li&gt;Skip payment step&lt;/li&gt;
&lt;li&gt;Coupon reuse&lt;/li&gt;
&lt;li&gt;Race conditions&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Information Disclosure
&lt;/h3&gt;

&lt;p&gt;Check for exposed files: /.git/config, /.env, /config.php.bak, /api/swagger.json&lt;/p&gt;




&lt;h2&gt;
  
  
  Must-Have Tools
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Burp Suite&lt;/td&gt;
&lt;td&gt;Web proxy and testing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Subfinder&lt;/td&gt;
&lt;td&gt;Subdomain enumeration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nuclei&lt;/td&gt;
&lt;td&gt;Vulnerability scanning&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ffuf&lt;/td&gt;
&lt;td&gt;Fuzzing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;httpx&lt;/td&gt;
&lt;td&gt;HTTP probing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nmap&lt;/td&gt;
&lt;td&gt;Port scanning&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SQLMap&lt;/td&gt;
&lt;td&gt;SQL injection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Amass&lt;/td&gt;
&lt;td&gt;Subdomain enumeration&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Tips for Success
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Do's
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Read the program scope carefully&lt;/li&gt;
&lt;li&gt;Start with less popular programs&lt;/li&gt;
&lt;li&gt;Focus on one vulnerability type&lt;/li&gt;
&lt;li&gt;Hunt consistently - 2-3 hours daily&lt;/li&gt;
&lt;li&gt;Learn from duplicates&lt;/li&gt;
&lt;li&gt;Network with other hunters&lt;/li&gt;
&lt;li&gt;Document everything&lt;/li&gt;
&lt;li&gt;Be patient&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Don'ts
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Don't use automated scanners blindly&lt;/li&gt;
&lt;li&gt;Don't spam reports&lt;/li&gt;
&lt;li&gt;Don't test without permission&lt;/li&gt;
&lt;li&gt;Don't give up early - 95% quit, be the 5%&lt;/li&gt;
&lt;li&gt;Don't chase only critical bugs&lt;/li&gt;
&lt;li&gt;Don't disclose publicly without permission&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Free Learning
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;PortSwigger Web Security Academy&lt;/li&gt;
&lt;li&gt;HackerOne Hacktivity&lt;/li&gt;
&lt;li&gt;PentesterLand Newsletter&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  YouTube Channels
&lt;/h3&gt;

&lt;p&gt;STOK, NahamSec, InsiderPhD, LiveOverflow, John Hammond&lt;/p&gt;

&lt;h3&gt;
  
  
  Books
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Web Application Hacker's Handbook&lt;/li&gt;
&lt;li&gt;Bug Bounty Bootcamp by Vickie Li&lt;/li&gt;
&lt;li&gt;Real-World Bug Hunting by Peter Yaworski&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Communities
&lt;/h3&gt;

&lt;p&gt;HackerOne Discord, Bugcrowd Discord, NahamSec Discord, Reddit r/bugbounty&lt;/p&gt;




&lt;h2&gt;
  
  
  Earnings Timeline
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Month 1-3: Learning, practicing, $0 earnings (normal)&lt;/li&gt;
&lt;li&gt;Month 4-6: First valid reports, $0-500&lt;/li&gt;
&lt;li&gt;Month 7-12: Consistent findings, $500-2000/month&lt;/li&gt;
&lt;li&gt;Year 2: Intermediate level, $2000-5000/month&lt;/li&gt;
&lt;li&gt;Year 3+: Advanced hunter, $5000-15000+/month&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Remember: Bug bounty is a marathon, not a sprint. Stay consistent, keep learning, and the rewards will come.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Last updated: January 2026&lt;/em&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>bugbounty</category>
      <category>tutorial</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Remote Money Resources &amp; Income Methods 2026 - Complete Guide</title>
      <dc:creator>krlz</dc:creator>
      <pubDate>Thu, 08 Jan 2026 01:19:05 +0000</pubDate>
      <link>https://open.forem.com/krlz/remote-money-resources-income-methods-2025-complete-guide-3oo4</link>
      <guid>https://open.forem.com/krlz/remote-money-resources-income-methods-2025-complete-guide-3oo4</guid>
      <description>&lt;p&gt;A comprehensive research compilation of ways to generate income remotely, with focus on methods available from Chile and Latin America.&lt;/p&gt;




&lt;h2&gt;
  
  
  Freelancing Platforms
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Global Major Platforms
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Platform&lt;/th&gt;
&lt;th&gt;Fee Structure&lt;/th&gt;
&lt;th&gt;Best For&lt;/th&gt;
&lt;th&gt;Earnings&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://upwork.com" rel="noopener noreferrer"&gt;Upwork&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;10-20%&lt;/td&gt;
&lt;td&gt;Developers, writers, designers&lt;/td&gt;
&lt;td&gt;$20-150/hr&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://fiverr.com" rel="noopener noreferrer"&gt;Fiverr&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;20%&lt;/td&gt;
&lt;td&gt;Micro-gigs, creative services&lt;/td&gt;
&lt;td&gt;$5-500+ per gig&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://toptal.com" rel="noopener noreferrer"&gt;Toptal&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0% (client pays)&lt;/td&gt;
&lt;td&gt;Top 3% talent&lt;/td&gt;
&lt;td&gt;$60-200+/hr&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://freelancer.com" rel="noopener noreferrer"&gt;Freelancer.com&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;10%&lt;/td&gt;
&lt;td&gt;Various projects&lt;/td&gt;
&lt;td&gt;Variable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://peopleperhour.com" rel="noopener noreferrer"&gt;PeoplePerHour&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;15-20%&lt;/td&gt;
&lt;td&gt;European market&lt;/td&gt;
&lt;td&gt;Variable&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  LATAM-Focused Platforms
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://workana.com" rel="noopener noreferrer"&gt;Workana&lt;/a&gt;&lt;/strong&gt; - Regional focus for Latin American professionals&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://virtuallatinos.com" rel="noopener noreferrer"&gt;Virtual Latinos&lt;/a&gt;&lt;/strong&gt; - VA services from LATAM to US businesses&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://clouddevs.com" rel="noopener noreferrer"&gt;CloudDevs&lt;/a&gt;&lt;/strong&gt; - Pre-vetted LatAm developers/designers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://latinhire.com" rel="noopener noreferrer"&gt;Latin Hire&lt;/a&gt;&lt;/strong&gt; - Recruits for South American educational companies&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Remote Job Boards
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Platform&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://arc.dev" rel="noopener noreferrer"&gt;Arc.dev&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Chile-specific remote jobs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://remotive.com" rel="noopener noreferrer"&gt;Remotive&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;16,000+ companies database&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://weworkremotely.com" rel="noopener noreferrer"&gt;We Work Remotely&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Large remote job board&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://flexjobs.com" rel="noopener noreferrer"&gt;FlexJobs&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Vetted remote opportunities&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://dynamitejobs.com" rel="noopener noreferrer"&gt;Dynamite Jobs&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Avg salary $2.4k-$6.7k/month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://remoteok.com" rel="noopener noreferrer"&gt;Remote OK&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Location-independent jobs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://dailyremote.com" rel="noopener noreferrer"&gt;Daily Remote&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Work from home opportunities&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Microtask Platforms
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Data Annotation &amp;amp; AI Training
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Platform&lt;/th&gt;
&lt;th&gt;Earnings&lt;/th&gt;
&lt;th&gt;Payment&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://appen.com" rel="noopener noreferrer"&gt;Appen&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$50-400+/month&lt;/td&gt;
&lt;td&gt;Monthly via Payoneer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://clickworker.com" rel="noopener noreferrer"&gt;Clickworker&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Variable&lt;/td&gt;
&lt;td&gt;Weekly via PayPal/Payoneer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://mturk.com" rel="noopener noreferrer"&gt;Amazon MTurk&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$5-80/month&lt;/td&gt;
&lt;td&gt;Bank (US) / Amazon gift cards&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://remotasks.com" rel="noopener noreferrer"&gt;Remotasks&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Variable&lt;/td&gt;
&lt;td&gt;Weekly&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://prolific.co" rel="noopener noreferrer"&gt;Prolific&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Higher rates&lt;/td&gt;
&lt;td&gt;PayPal&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Survey &amp;amp; Opinion Platforms
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://swagbucks.com" rel="noopener noreferrer"&gt;Swagbucks&lt;/a&gt; - Multiple earning methods&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://surveyjunkie.com" rel="noopener noreferrer"&gt;Survey Junkie&lt;/a&gt; - Get paid for opinions&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://toluna.com" rel="noopener noreferrer"&gt;Toluna&lt;/a&gt; - Share opinions&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://ysense.com" rel="noopener noreferrer"&gt;ySense&lt;/a&gt; - Various tasks&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://surveytime.io" rel="noopener noreferrer"&gt;SurveyTime&lt;/a&gt; - $1 per survey, instant payment&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  User Testing
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Platform&lt;/th&gt;
&lt;th&gt;Rate&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://usertesting.com" rel="noopener noreferrer"&gt;UserTesting&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Up to $60/test&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://userlytics.com" rel="noopener noreferrer"&gt;Userlytics&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Variable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://trymyui.com" rel="noopener noreferrer"&gt;TryMyUI&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;$10/test&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://testingtime.com" rel="noopener noreferrer"&gt;TestingTime&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Variable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://userfeel.com" rel="noopener noreferrer"&gt;UserFeel&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;$10/test&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Teaching English Online
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Platform&lt;/th&gt;
&lt;th&gt;Rate&lt;/th&gt;
&lt;th&gt;Commission&lt;/th&gt;
&lt;th&gt;Best For&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://italki.com" rel="noopener noreferrer"&gt;italki&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$10-60/hr&lt;/td&gt;
&lt;td&gt;15% flat&lt;/td&gt;
&lt;td&gt;Long-term student building&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://preply.com" rel="noopener noreferrer"&gt;Preply&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$10-45/hr&lt;/td&gt;
&lt;td&gt;Up to 33%&lt;/td&gt;
&lt;td&gt;Europe, LATAM, exam prep&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://cambly.com" rel="noopener noreferrer"&gt;Cambly&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~$10-12/hr&lt;/td&gt;
&lt;td&gt;Fixed rate&lt;/td&gt;
&lt;td&gt;Flexible, no experience needed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://vipkid.com" rel="noopener noreferrer"&gt;VIPKid&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$14-22/hr&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;Teaching Chinese students&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Other platforms: &lt;a href="https://tutor.com" rel="noopener noreferrer"&gt;Tutor.com&lt;/a&gt;, &lt;a href="https://chegg.com" rel="noopener noreferrer"&gt;Chegg Tutors&lt;/a&gt;, &lt;a href="https://superprof.com" rel="noopener noreferrer"&gt;Superprof&lt;/a&gt;, &lt;a href="https://skooli.com" rel="noopener noreferrer"&gt;Skooli&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; Many successful tutors earn $2,000-4,000/month full-time.&lt;/p&gt;




&lt;h2&gt;
  
  
  Bug Bounty &amp;amp; Security Research
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Major Platforms
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Platform&lt;/th&gt;
&lt;th&gt;Avg Payout&lt;/th&gt;
&lt;th&gt;Top Payout&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://hackerone.com" rel="noopener noreferrer"&gt;HackerOne&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$500-5,000&lt;/td&gt;
&lt;td&gt;$100,000+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://bugcrowd.com" rel="noopener noreferrer"&gt;Bugcrowd&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$300-3,000&lt;/td&gt;
&lt;td&gt;$50,000+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://synack.com" rel="noopener noreferrer"&gt;Synack&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Variable&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://intigriti.com" rel="noopener noreferrer"&gt;Intigriti&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Variable&lt;/td&gt;
&lt;td&gt;Variable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://yeswehack.com" rel="noopener noreferrer"&gt;YesWeHack&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Variable&lt;/td&gt;
&lt;td&gt;Variable&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Earnings Potential
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Beginners:&lt;/strong&gt; $500-2,000/month&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Experienced:&lt;/strong&gt; $5,000-10,000/month&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Top hunters:&lt;/strong&gt; $100,000+/year&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Open Source Bounties
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Platform&lt;/th&gt;
&lt;th&gt;Payment&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://gitcoin.co" rel="noopener noreferrer"&gt;Gitcoin&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ETH/ERC-20&lt;/td&gt;
&lt;td&gt;Web3/OSS bounties&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://bountysource.com" rel="noopener noreferrer"&gt;Bountysource&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;USD&lt;/td&gt;
&lt;td&gt;Classic paid issues&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://algora.io" rel="noopener noreferrer"&gt;Algora&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;USD&lt;/td&gt;
&lt;td&gt;GitHub-integrated bounties&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://opencollective.com" rel="noopener noreferrer"&gt;Open Collective&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Donations&lt;/td&gt;
&lt;td&gt;Sponsor-funded projects&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Typical Bounty Amounts
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Micro-fixes: $20-200&lt;/li&gt;
&lt;li&gt;Feature tasks: $200-2,500&lt;/li&gt;
&lt;li&gt;Major features: $2,500-25,000&lt;/li&gt;
&lt;li&gt;Grants: $5,000-100,000+&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Look for labels on GitHub: &lt;code&gt;bounty&lt;/code&gt;, &lt;code&gt;$&lt;/code&gt;, &lt;code&gt;paid&lt;/code&gt;, &lt;code&gt;help-wanted&lt;/code&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Passive Income Methods
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Digital Products
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Templates (Notion, Canva) via Gumroad, Etsy - $2,000-5,000+/month&lt;/li&gt;
&lt;li&gt;Online Courses via Udemy, Skillshare, Teachable&lt;/li&gt;
&lt;li&gt;E-books via Amazon KDP, Apple Books&lt;/li&gt;
&lt;li&gt;Stock Photos/Videos via Shutterstock, Adobe Stock&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Affiliate Marketing
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://affiliate-program.amazon.com" rel="noopener noreferrer"&gt;Amazon Affiliates&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://shareasale.com" rel="noopener noreferrer"&gt;ShareASale&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://awin.com" rel="noopener noreferrer"&gt;AWIN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://clickbank.com" rel="noopener noreferrer"&gt;ClickBank&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cj.com" rel="noopener noreferrer"&gt;CJ Affiliate&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  E-Commerce
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Print-on-Demand:&lt;/strong&gt; Teespring, Redbubble, Printful, Printify&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dropshipping:&lt;/strong&gt; Shopify + AliExpress/Spocket&lt;/p&gt;

&lt;h3&gt;
  
  
  Content Creation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;YouTube monetization&lt;/li&gt;
&lt;li&gt;Blogging (ads + affiliates)&lt;/li&gt;
&lt;li&gt;Podcasting (sponsorships)&lt;/li&gt;
&lt;li&gt;Newsletter subscriptions&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Chile-Specific Resources
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Government Grants for Entrepreneurs
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;SERCOTEC Programs:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Capital Semilla Emprende: $3,500,000 CLP for new businesses&lt;/li&gt;
&lt;li&gt;Programa Crece: $5,000,000 CLP for existing micro/small businesses&lt;/li&gt;
&lt;li&gt;Capital Abeja: $3,500,000 CLP exclusively for women&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;CORFO Programs:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Semilla Inicia Line 1: Up to $15,000,000 CLP (90%)&lt;/li&gt;
&lt;li&gt;Semilla Inicia Line 2: Up to $50,000,000 CLP (90%)&lt;/li&gt;
&lt;li&gt;Semilla Inicia Line 3: Up to $75,000,000 CLP (90%)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key Portals:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://fondos.gob.cl" rel="noopener noreferrer"&gt;Portal Fondos Concursables&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://sercotec.cl" rel="noopener noreferrer"&gt;SERCOTEC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://corfo.cl" rel="noopener noreferrer"&gt;CORFO&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Social Benefits (Registro Social de Hogares)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Benefit&lt;/th&gt;
&lt;th&gt;Amount (CLP)&lt;/th&gt;
&lt;th&gt;Requirement&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Bono Canasta Basica&lt;/td&gt;
&lt;td&gt;$11,318/person&lt;/td&gt;
&lt;td&gt;Auto for SUF recipients&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Subsidio Unico Familiar&lt;/td&gt;
&lt;td&gt;$21,243/month&lt;/td&gt;
&lt;td&gt;60% RSH&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pension Garantizada Universal&lt;/td&gt;
&lt;td&gt;Up to $224,004/month&lt;/td&gt;
&lt;td&gt;65+, 90% RSH&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bono Logro Escolar&lt;/td&gt;
&lt;td&gt;$40,768-67,955&lt;/td&gt;
&lt;td&gt;30% RSH, top grades&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Portals:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://registrosocial.gob.cl" rel="noopener noreferrer"&gt;Registro Social de Hogares&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ventanillaunicasocial.gob.cl" rel="noopener noreferrer"&gt;Ventanilla Unica Social&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://chileatiende.gob.cl" rel="noopener noreferrer"&gt;ChileAtiende&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  OSINT Resources Chile
&lt;/h3&gt;

&lt;p&gt;From &lt;a href="https://github.com/0xSS3K/OSINT-CHILE" rel="noopener noreferrer"&gt;OSINT-CHILE&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SII&lt;/strong&gt; (sii.cl) - Tax verification, business status&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ChileCompra&lt;/strong&gt; (chilecompra.cl) - State contracts, government spending&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mercado Publico&lt;/strong&gt; (mercadopublico.cl) - Public procurement&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Registro Empresas&lt;/strong&gt; (registrodeempresasysociedades.cl) - Corporate ownership&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Poder Judicial&lt;/strong&gt; (pjud.cl) - Litigation history&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Quick Reference - By Skill Level
&lt;/h2&gt;

&lt;h3&gt;
  
  
  No Experience Required
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Surveys (Swagbucks, Prolific)&lt;/li&gt;
&lt;li&gt;Microtasks (Clickworker, Appen)&lt;/li&gt;
&lt;li&gt;User Testing (UserTesting, TryMyUI)&lt;/li&gt;
&lt;li&gt;Cambly (English conversations)&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Some Skills Required
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Freelancing (Upwork, Fiverr)&lt;/li&gt;
&lt;li&gt;Virtual Assistant (Virtual Latinos)&lt;/li&gt;
&lt;li&gt;Translation (Gengo, Unbabel)&lt;/li&gt;
&lt;li&gt;Tutoring (italki, Preply)&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Technical Skills
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Bug Bounties (HackerOne, Bugcrowd)&lt;/li&gt;
&lt;li&gt;Open Source Bounties (Gitcoin)&lt;/li&gt;
&lt;li&gt;Remote Dev Jobs (Arc, Toptal)&lt;/li&gt;
&lt;li&gt;GitHub Sponsors&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Entrepreneurship
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;SERCOTEC/CORFO funding&lt;/li&gt;
&lt;li&gt;E-commerce/Dropshipping&lt;/li&gt;
&lt;li&gt;Course creation&lt;/li&gt;
&lt;li&gt;Affiliate marketing&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  GitHub Resource Lists
&lt;/h2&gt;

&lt;p&gt;Curated earning lists for more resources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/onmyway133/awesome-online-earning" rel="noopener noreferrer"&gt;awesome-online-earning&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/yourincomehome/awesome-passive-income" rel="noopener noreferrer"&gt;awesome-passive-income&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/topics/passive-income" rel="noopener noreferrer"&gt;GitHub Topics: passive-income&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/topics/make-money-online" rel="noopener noreferrer"&gt;GitHub Topics: make-money-online&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Research compiled January 2025&lt;/em&gt;&lt;/p&gt;

</description>
      <category>remotework</category>
      <category>freelancing</category>
      <category>chile</category>
      <category>income</category>
    </item>
    <item>
      <title>The Chilean Recipe Funa: How Chileans Weaponized Food Recipes as Digital Protest</title>
      <dc:creator>krlz</dc:creator>
      <pubDate>Sat, 27 Dec 2025 16:10:39 +0000</pubDate>
      <link>https://open.forem.com/krlz/the-chilean-recipe-funa-how-chileans-weaponized-food-recipes-as-digital-protest-5ag</link>
      <guid>https://open.forem.com/krlz/the-chilean-recipe-funa-how-chileans-weaponized-food-recipes-as-digital-protest-5ag</guid>
      <description>&lt;h2&gt;
  
  
  When Chileans Get Mad, They Post Recipes
&lt;/h2&gt;

&lt;p&gt;There is a unique internet phenomenon that has become a powerful form of digital activism in Chile: &lt;strong&gt;flooding social media comments with traditional food recipes&lt;/strong&gt; as a form of protest. This practice, known as "Operación Recetas" (Operation Recipes), has become a symbol of Chilean digital resistance.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Origin: Maroon 5 at Viña del Mar 2020
&lt;/h2&gt;

&lt;p&gt;It all started at the prestigious &lt;strong&gt;Festival de Viña del Mar&lt;/strong&gt; in February 2020. Maroon 5 was invited to perform, but things went terribly wrong:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The band arrived &lt;strong&gt;30 minutes late&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Adam Levine showed little energy and minimal audience interaction&lt;/li&gt;
&lt;li&gt;They refused the traditional "gaviotas" awards (a huge sign of disrespect)&lt;/li&gt;
&lt;li&gt;Levine later insulted the festival, calling it "just a TV show, not a concert"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The response? Thousands of Chileans flooded Maroon 5s Instagram with traditional Chilean recipes. Adam Levine had to &lt;strong&gt;disable comments entirely&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Five years later&lt;/strong&gt;, when he reopened comments in 2024, posts that previously had 6-22 comments suddenly had &lt;strong&gt;thousands&lt;/strong&gt; - all from Chileans who had been waiting patiently to continue the funa.&lt;/p&gt;

&lt;h2&gt;
  
  
  Other Notable Targets
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Oscars (2024)&lt;/strong&gt;: After "La Memoria Infinita" didnt win Best Documentary&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;British Museum&lt;/strong&gt;: Demanding the return of the Moai from Easter Island&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bad Bunny (2023)&lt;/strong&gt;: After opposing a Chilean AI-generated song using his voice&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Donald Trump (2019)&lt;/strong&gt;: Had to permanently restrict comments&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Royal House of Spain&lt;/strong&gt;: Flooded with recipes as protest&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Top 10 Chilean Recipes Used in Digital Funas
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Pastel de Choclo
&lt;/h3&gt;

&lt;p&gt;A corn and beef casserole layered with chicken, black olives, hard-boiled eggs, and raisins. The corn topping is slightly sweet and caramelized.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ingredients&lt;/strong&gt;: Ground beef, onions, chicken pieces, corn (choclo), milk, basil, cumin, black olives, hard-boiled eggs, raisins.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Empanadas de Pino
&lt;/h3&gt;

&lt;p&gt;The most iconic Chilean food. Large baked pastries filled with seasoned ground beef, onions, olives, raisins, and hard-boiled egg.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tip&lt;/strong&gt;: Chileans say the secret is preparing the filling the night before!&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Sopaipillas
&lt;/h3&gt;

&lt;p&gt;Fried pumpkin dough discs, served savory with pebre (Chilean salsa) or sweet with chancaca (molasses syrup) as "sopaipillas pasadas."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ingredients&lt;/strong&gt;: Flour, cooked pumpkin, salt, baking powder, oil for frying.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Cazuela
&lt;/h3&gt;

&lt;p&gt;The ultimate Chilean comfort food. A hearty stew with beef or chicken, large pieces of pumpkin, potato, corn on the cob, and rice. Served in a clay bowl.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Charquicán
&lt;/h3&gt;

&lt;p&gt;A rustic dish with indigenous Mapuche roots. Ground beef mixed with mashed potatoes, pumpkin, corn, and peas, always topped with a fried egg.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Caldillo de Congrio
&lt;/h3&gt;

&lt;p&gt;Conger eel soup so famous that poet &lt;strong&gt;Pablo Neruda wrote an ode to it&lt;/strong&gt;. Rich tomato-based broth with potatoes, onions, and herbs.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Humitas
&lt;/h3&gt;

&lt;p&gt;Ground fresh corn mixed with onions, basil, and seasonings, wrapped in corn husks and boiled. Chiles answer to tamales.&lt;/p&gt;

&lt;h3&gt;
  
  
  8. Chancho en Piedra
&lt;/h3&gt;

&lt;p&gt;A fresh salsa made by grinding tomatoes, garlic, chili, and cilantro on a stone mortar. The name means "pig in stone" though it contains no pork!&lt;/p&gt;

&lt;h3&gt;
  
  
  9. Completo
&lt;/h3&gt;

&lt;p&gt;The Chilean hot dog taken to extremes: loaded with mashed avocado, diced tomatoes, mayonnaise, and sauerkraut. A street food legend.&lt;/p&gt;

&lt;h3&gt;
  
  
  10. Curanto
&lt;/h3&gt;

&lt;p&gt;A traditional feast from Chiloé island where seafood, meats, potatoes, and chapaleles (potato dumplings) are cooked in a pit lined with hot stones and covered with nalca leaves.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Art of the Chilean Funa
&lt;/h2&gt;

&lt;p&gt;What makes this form of protest unique:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ironic and humorous tone&lt;/strong&gt;: Recipes are posted with complete sincerity&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cultural pride&lt;/strong&gt;: Uses traditional dishes as symbols of national identity&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Persistence&lt;/strong&gt;: Chileans will wait YEARS to continue a funa&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Community coordination&lt;/strong&gt;: Thousands participate spontaneously&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Non-violent resistance&lt;/strong&gt;: Food recipes as weapons of mass commentary&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The Chilean recipe funa represents a creative form of digital activism that combines cultural pride, humor, and persistence. When you see hundreds of empanada recipes flooding someones Instagram comments, you know theyve upset an entire nation.&lt;/p&gt;

&lt;p&gt;As Chilean internet users say: &lt;strong&gt;"Chilenos never forget, and they always have a recipe ready."&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Have you witnessed a Chilean recipe funa in action? Share your favorite Chilean dish in the comments!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>culture</category>
      <category>socialmedia</category>
      <category>viral</category>
      <category>food</category>
    </item>
    <item>
      <title>Complete Guide to CFD Trading: What Are CFDs &amp; How to Automate Trading with Python (2025)</title>
      <dc:creator>krlz</dc:creator>
      <pubDate>Sat, 27 Dec 2025 04:01:02 +0000</pubDate>
      <link>https://open.forem.com/krlz/complete-guide-to-us-index-futures-trading-brokers-python-automation-market-schedules-2025-4pgm</link>
      <guid>https://open.forem.com/krlz/complete-guide-to-us-index-futures-trading-brokers-python-automation-market-schedules-2025-4pgm</guid>
      <description>&lt;h1&gt;
  
  
  Complete Guide to CFD Trading: What Are CFDs &amp;amp; How to Automate Trading with Python (2025)
&lt;/h1&gt;

&lt;p&gt;Contracts for Difference (CFDs) have become one of the most popular ways to trade financial markets globally. This comprehensive guide will explain what CFDs are, how they work, and most importantly—how to &lt;strong&gt;automate your CFD trading using Python&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is a CFD (Contract for Difference)?
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;Contract for Difference (CFD)&lt;/strong&gt; is a financial derivative that allows you to speculate on the price movement of an asset &lt;strong&gt;without owning the actual underlying asset&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  How CFDs Work
&lt;/h3&gt;

&lt;p&gt;Instead of buying actual stocks, commodities, or currencies, you enter into a contract with a broker to exchange the &lt;strong&gt;difference in price&lt;/strong&gt; between when you open and close your trade.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Profit/Loss = (Exit Price - Entry Price) × Position Size × Contract Value
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Simple Example
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Entry Price&lt;/th&gt;
&lt;th&gt;Exit Price&lt;/th&gt;
&lt;th&gt;Units&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Bullish&lt;/td&gt;
&lt;td&gt;BUY (Long)&lt;/td&gt;
&lt;td&gt;$100&lt;/td&gt;
&lt;td&gt;$110&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;+$100 profit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bullish&lt;/td&gt;
&lt;td&gt;BUY (Long)&lt;/td&gt;
&lt;td&gt;$100&lt;/td&gt;
&lt;td&gt;$90&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;-$100 loss&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bearish&lt;/td&gt;
&lt;td&gt;SELL (Short)&lt;/td&gt;
&lt;td&gt;$100&lt;/td&gt;
&lt;td&gt;$90&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;+$100 profit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bearish&lt;/td&gt;
&lt;td&gt;SELL (Short)&lt;/td&gt;
&lt;td&gt;$100&lt;/td&gt;
&lt;td&gt;$110&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;-$100 loss&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Key Characteristics of CFDs
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;No Ownership&lt;/strong&gt;: You never own the underlying asset&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Leverage&lt;/strong&gt;: Trade larger positions with smaller capital (e.g., 1:30 leverage means $1,000 controls $30,000)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Go Long or Short&lt;/strong&gt;: Profit from both rising AND falling markets&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No Expiry Date&lt;/strong&gt;: Unlike futures, CFDs have no fixed settlement date&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wide Market Access&lt;/strong&gt;: Trade stocks, indices, forex, commodities, crypto—all from one account&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  CFDs vs Futures vs Stocks
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;CFDs&lt;/th&gt;
&lt;th&gt;Futures&lt;/th&gt;
&lt;th&gt;Stocks&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Ownership&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Leverage&lt;/td&gt;
&lt;td&gt;High (1:5 to 1:30)&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Low (margin accounts)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Expiry Date&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Yes (quarterly)&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Short Selling&lt;/td&gt;
&lt;td&gt;Easy&lt;/td&gt;
&lt;td&gt;Easy&lt;/td&gt;
&lt;td&gt;Restricted&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overnight Fees&lt;/td&gt;
&lt;td&gt;Yes (swap)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Markets&lt;/td&gt;
&lt;td&gt;All&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;td&gt;Stocks only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Regulation&lt;/td&gt;
&lt;td&gt;Varies&lt;/td&gt;
&lt;td&gt;Strict (exchanges)&lt;/td&gt;
&lt;td&gt;Strict&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Popular CFD Instruments
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Index CFDs
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;US100&lt;/strong&gt; - NASDAQ 100 Index&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;US500&lt;/strong&gt; - S&amp;amp;P 500 Index
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;US30&lt;/strong&gt; - Dow Jones Industrial Average&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GER40&lt;/strong&gt; - DAX 40 (Germany)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UK100&lt;/strong&gt; - FTSE 100 (UK)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Forex CFDs
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;EUR/USD, GBP/USD, USD/JPY, AUD/USD&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Commodity CFDs
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Gold (XAUUSD), Silver (XAGUSD), Oil (WTI, Brent)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Stock CFDs
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Apple, Tesla, Nvidia, Amazon, Microsoft, etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Crypto CFDs
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Bitcoin, Ethereum, and other major cryptocurrencies&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Understanding CFD Costs
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Spread
&lt;/h3&gt;

&lt;p&gt;The difference between the buy (ask) and sell (bid) price.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;spread&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ask_price&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;bid_price&lt;/span&gt;
&lt;span class="n"&gt;spread_cost&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;spread&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;position_size&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;contract_value&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Swap/Overnight Fees
&lt;/h3&gt;

&lt;p&gt;Charged when holding positions overnight. Can be positive or negative depending on the instrument and direction.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Commission (some brokers)
&lt;/h3&gt;

&lt;p&gt;Fixed fee per trade or per lot traded.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example Cost Calculation
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Trading 1 lot of US100 CFD
&lt;/span&gt;&lt;span class="n"&gt;entry_price&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;21500&lt;/span&gt;
&lt;span class="n"&gt;spread&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;1.5&lt;/span&gt;  &lt;span class="c1"&gt;# points
&lt;/span&gt;&lt;span class="n"&gt;contract_value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;  &lt;span class="c1"&gt;# $1 per point for mini lot
&lt;/span&gt;&lt;span class="n"&gt;position_size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;

&lt;span class="n"&gt;spread_cost&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;spread&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;contract_value&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;position_size&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Spread cost: $&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;spread_cost&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# $1.50
&lt;/span&gt;
&lt;span class="c1"&gt;# If held overnight (example swap rate)
&lt;/span&gt;&lt;span class="n"&gt;swap_rate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2.50&lt;/span&gt;  &lt;span class="c1"&gt;# $ per night for long position
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Overnight cost: $&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;swap_rate&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  CFD Brokers with API Access
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. IG Markets
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;: Professional API trading, wide market coverage&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;API&lt;/strong&gt;: REST API + Streaming (Lightstreamer)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Python Library&lt;/strong&gt;: &lt;code&gt;trading-ig&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Markets&lt;/strong&gt;: 17,000+ CFD markets&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Regulation&lt;/strong&gt;: FCA, ASIC, BaFin&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. OANDA
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;: Forex and CFD automation&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;API&lt;/strong&gt;: REST v20 API&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Python Library&lt;/strong&gt;: &lt;code&gt;oandapyV20&lt;/code&gt;, &lt;code&gt;v20&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Markets&lt;/strong&gt;: Forex, indices, commodities, bonds&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Regulation&lt;/strong&gt;: FCA, CFTC, ASIC&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. XTB
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;: European traders&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;API&lt;/strong&gt;: xStation5 WebSocket API&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Python Library&lt;/strong&gt;: &lt;code&gt;XTBApi&lt;/code&gt;, &lt;code&gt;xtbclient&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Markets&lt;/strong&gt;: 5,800+ CFD instruments&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Regulation&lt;/strong&gt;: FCA, CySEC, BaFin&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. MetaTrader 5 Brokers
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;: Widest broker compatibility&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;API&lt;/strong&gt;: MetaTrader 5 Python integration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Python Library&lt;/strong&gt;: &lt;code&gt;MetaTrader5&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Brokers&lt;/strong&gt;: IC Markets, Pepperstone, FP Markets, etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Markets&lt;/strong&gt;: Depends on broker&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. cTrader Brokers
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;: Advanced algo trading&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;API&lt;/strong&gt;: cTrader Open API&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Python Library&lt;/strong&gt;: &lt;code&gt;ctrader-open-api&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Brokers&lt;/strong&gt;: IC Markets, Pepperstone, FxPro&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Markets&lt;/strong&gt;: Depends on broker&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Broker Comparison Table
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Broker&lt;/th&gt;
&lt;th&gt;API Type&lt;/th&gt;
&lt;th&gt;Python Library&lt;/th&gt;
&lt;th&gt;Min Deposit&lt;/th&gt;
&lt;th&gt;Spreads&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;IG Markets&lt;/td&gt;
&lt;td&gt;REST + Stream&lt;/td&gt;
&lt;td&gt;trading-ig&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;td&gt;From 0.6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OANDA&lt;/td&gt;
&lt;td&gt;REST v20&lt;/td&gt;
&lt;td&gt;oandapyV20&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;td&gt;From 1.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;XTB&lt;/td&gt;
&lt;td&gt;WebSocket&lt;/td&gt;
&lt;td&gt;XTBApi&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;td&gt;From 0.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MT5 Brokers&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;MetaTrader5&lt;/td&gt;
&lt;td&gt;Varies&lt;/td&gt;
&lt;td&gt;Varies&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;cTrader&lt;/td&gt;
&lt;td&gt;Open API&lt;/td&gt;
&lt;td&gt;ctrader-open-api&lt;/td&gt;
&lt;td&gt;Varies&lt;/td&gt;
&lt;td&gt;Varies&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;Risk Warning&lt;/strong&gt;: 67-80% of retail investor accounts lose money when trading CFDs. You should consider whether you understand how CFDs work and whether you can afford to take the high risk of losing your money.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Setting Up Python for CFD Trading
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Install Required Libraries
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Core libraries&lt;/span&gt;
pip &lt;span class="nb"&gt;install &lt;/span&gt;pandas numpy matplotlib

&lt;span class="c"&gt;# Broker-specific libraries&lt;/span&gt;
pip &lt;span class="nb"&gt;install &lt;/span&gt;trading-ig        &lt;span class="c"&gt;# IG Markets&lt;/span&gt;
pip &lt;span class="nb"&gt;install &lt;/span&gt;oandapyV20        &lt;span class="c"&gt;# OANDA&lt;/span&gt;
pip &lt;span class="nb"&gt;install &lt;/span&gt;XTBApi            &lt;span class="c"&gt;# XTB&lt;/span&gt;
pip &lt;span class="nb"&gt;install &lt;/span&gt;MetaTrader5       &lt;span class="c"&gt;# MT5 (Windows only)&lt;/span&gt;
pip &lt;span class="nb"&gt;install &lt;/span&gt;ctrader-open-api  &lt;span class="c"&gt;# cTrader&lt;/span&gt;

&lt;span class="c"&gt;# Technical analysis&lt;/span&gt;
pip &lt;span class="nb"&gt;install &lt;/span&gt;ta pandas-ta
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Automated CFD Trading with IG Markets
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Setup
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Create an IG Markets account (demo or live)&lt;/li&gt;
&lt;li&gt;Enable API access in your account settings&lt;/li&gt;
&lt;li&gt;Get your API key from IG Labs&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Basic Connection
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;trading_ig&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;IGService&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;trading_ig.config&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;config&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;

&lt;span class="c1"&gt;# Initialize connection
&lt;/span&gt;&lt;span class="n"&gt;ig_service&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;IGService&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;username&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;your_username&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;password&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;your_password&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;your_api_key&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;acc_type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;DEMO&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;  &lt;span class="c1"&gt;# or 'LIVE'
&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Login
&lt;/span&gt;&lt;span class="n"&gt;ig_service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create_session&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Connected to IG Markets!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Get account info
&lt;/span&gt;&lt;span class="n"&gt;account_info&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ig_service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fetch_accounts&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;account_info&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Get Market Data
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Search for US100 (NASDAQ 100)
&lt;/span&gt;&lt;span class="n"&gt;markets&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ig_service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;search_markets&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;US Tech 100&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;markets&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Get specific market details
# EPIC for US100 CFD is typically: IX.D.NASDAQ.IFD.IP
&lt;/span&gt;&lt;span class="n"&gt;epic&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;IX.D.NASDAQ.IFD.IP&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;market_info&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ig_service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fetch_market_by_epic&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;epic&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Instrument: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;market_info&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;instrument&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bid: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;market_info&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;snapshot&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;bid&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Ask: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;market_info&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;snapshot&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;offer&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Get historical prices
&lt;/span&gt;&lt;span class="n"&gt;prices&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ig_service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fetch_historical_prices_by_epic&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;epic&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;epic&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;resolution&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;HOUR&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;numpoints&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;prices&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;tail&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Place CFD Orders
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Open a BUY position on US100
&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ig_service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create_open_position&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;epic&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;IX.D.NASDAQ.IFD.IP&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;direction&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;BUY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;# 1 contract
&lt;/span&gt;    &lt;span class="n"&gt;order_type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MARKET&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;currency_code&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;USD&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;force_open&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;guaranteed_stop&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;stop_level&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;stop_distance&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;# 50 points stop loss
&lt;/span&gt;    &lt;span class="n"&gt;limit_level&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;limit_distance&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;  &lt;span class="c1"&gt;# 100 points take profit
&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Deal Reference: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;dealReference&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Check position status
&lt;/span&gt;&lt;span class="n"&gt;deal_ref&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;dealReference&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;confirm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ig_service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fetch_deal_by_deal_reference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;deal_ref&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Status: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;confirm&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;dealStatus&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Close Position
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Get all open positions
&lt;/span&gt;&lt;span class="n"&gt;positions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ig_service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fetch_open_positions&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;positions&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Close a specific position
&lt;/span&gt;&lt;span class="n"&gt;deal_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;DEAL_ID_HERE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;close_response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ig_service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;close_open_position&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;deal_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;deal_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;direction&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SELL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;# Opposite of open direction
&lt;/span&gt;    &lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;order_type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MARKET&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Position closed: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;close_response&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Automated CFD Trading with OANDA
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Setup
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Create an OANDA fxTrade account&lt;/li&gt;
&lt;li&gt;Generate API token in Account Management Portal&lt;/li&gt;
&lt;li&gt;Note your account ID&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Basic Connection
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;oandapyV20&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;oandapyV20.endpoints.accounts&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;accounts&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;oandapyV20.endpoints.instruments&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;instruments&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;oandapyV20.endpoints.orders&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;oandapyV20.endpoints.positions&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;positions&lt;/span&gt;

&lt;span class="c1"&gt;# Configuration
&lt;/span&gt;&lt;span class="n"&gt;ACCESS_TOKEN&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;your_access_token&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;ACCOUNT_ID&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;your_account_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;ENVIRONMENT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;practice&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;  &lt;span class="c1"&gt;# or "live"
&lt;/span&gt;
&lt;span class="c1"&gt;# Initialize client
&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;oandapyV20&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;API&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;access_token&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;ACCESS_TOKEN&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;environment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;ENVIRONMENT&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Get account summary
&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;accounts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;AccountSummary&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ACCOUNT_ID&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Balance: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;account&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;balance&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;NAV: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;account&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;NAV&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Get Market Data
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;

&lt;span class="c1"&gt;# Get current price
&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;instruments&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;EUR_USD,US30_USD,NAS100_USD&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;instruments&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;InstrumentsCandles&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;instrument&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;NAS100_USD&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;# US100/NASDAQ CFD
&lt;/span&gt;    &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;count&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;granularity&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;H1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Convert to DataFrame
&lt;/span&gt;&lt;span class="n"&gt;candles&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;candles&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;candle&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;candles&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;time&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;candle&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;time&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;open&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;candle&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;mid&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;o&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;high&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;candle&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;mid&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;h&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;low&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;candle&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;mid&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;l&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;close&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;candle&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;mid&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;c&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;volume&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;candle&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;volume&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;time&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_datetime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;time&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;tail&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Place CFD Orders
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Market Order - Buy 1 unit of NAS100 (NASDAQ 100 CFD)
&lt;/span&gt;&lt;span class="n"&gt;order_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;order&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;instrument&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;NAS100_USD&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;units&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;# Positive for BUY, negative for SELL
&lt;/span&gt;        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MARKET&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;positionFill&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;DEFAULT&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;OrderCreate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ACCOUNT_ID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;order_data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Order placed: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Market Order with Stop Loss and Take Profit
&lt;/span&gt;&lt;span class="n"&gt;order_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;order&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;instrument&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;NAS100_USD&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;units&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MARKET&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;positionFill&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;DEFAULT&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;stopLossOnFill&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;distance&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;50&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;  &lt;span class="c1"&gt;# 50 points
&lt;/span&gt;        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;takeProfitOnFill&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;distance&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;100&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;  &lt;span class="c1"&gt;# 100 points
&lt;/span&gt;        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;OrderCreate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ACCOUNT_ID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;order_data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Order with SL/TP: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Limit Order
&lt;/span&gt;&lt;span class="n"&gt;limit_order&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;order&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;instrument&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;NAS100_USD&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;units&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;LIMIT&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;price&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;21000.0&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;timeInForce&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;GTC&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;  &lt;span class="c1"&gt;# Good Till Cancelled
&lt;/span&gt;    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;OrderCreate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ACCOUNT_ID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;limit_order&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Get and Close Positions
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Get all open positions
&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;positions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;OpenPositions&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ACCOUNT_ID&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Open positions: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Close a specific position
&lt;/span&gt;&lt;span class="n"&gt;close_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;longUnits&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ALL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;  &lt;span class="c1"&gt;# Close all long units
&lt;/span&gt;    &lt;span class="c1"&gt;# or "shortUnits": "ALL" for short positions
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;positions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;PositionClose&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;ACCOUNT_ID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;instrument&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;NAS100_USD&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;close_data&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Position closed: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Automated CFD Trading with XTB
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Setup
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Create an XTB account&lt;/li&gt;
&lt;li&gt;Enable API access&lt;/li&gt;
&lt;li&gt;Note your account ID and password&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Basic Connection
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;XTBApi.api&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Client&lt;/span&gt;

&lt;span class="c1"&gt;# Initialize client
&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Client&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# Login
&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;login&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;your_user_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;your_password&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;mode&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;demo&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# or "real"
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Connected to XTB!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Get account info
&lt;/span&gt;&lt;span class="n"&gt;account_info&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_margin_level&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Balance: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;account_info&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;balance&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Equity: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;account_info&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;equity&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Get Market Data
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Get current price for US100
&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;US100&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;price&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_symbol&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Symbol: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;price&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;symbol&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Ask: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;price&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;ask&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bid: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;price&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;bid&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Get all available symbols
&lt;/span&gt;&lt;span class="n"&gt;all_symbols&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_all_symbols&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;sym&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;all_symbols&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;US&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;sym&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;symbol&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;sym&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;symbol&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;sym&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;description&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Place Orders
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Buy US100 CFD
&lt;/span&gt;&lt;span class="n"&gt;trade&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;open_trade&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;mode&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;# 0=BUY, 1=SELL
&lt;/span&gt;    &lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;US100&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;volume&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.1&lt;/span&gt;  &lt;span class="c1"&gt;# Lot size
&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Trade opened: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;trade&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Buy with Stop Loss and Take Profit
&lt;/span&gt;&lt;span class="n"&gt;trade&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;open_trade&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;mode&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;US100&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;volume&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;sl&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;21400.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;# Stop Loss price
&lt;/span&gt;    &lt;span class="n"&gt;tp&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;21600.0&lt;/span&gt;   &lt;span class="c1"&gt;# Take Profit price
&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Get open trades
&lt;/span&gt;&lt;span class="n"&gt;open_trades&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_trades&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;open_trades&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Order: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;order&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;, Symbol: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;symbol&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;, Profit: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;profit&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Close a trade
&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;close_trade&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;order_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;12345&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Logout when done
&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;logout&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Automated CFD Trading with MetaTrader 5
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Windows 10 or higher (MT5 Python API is Windows-only)&lt;/li&gt;
&lt;li&gt;MetaTrader 5 terminal installed&lt;/li&gt;
&lt;li&gt;Account with an MT5 broker (IC Markets, Pepperstone, etc.)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Setup
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;MetaTrader5&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;mt5&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;

&lt;span class="c1"&gt;# Initialize MT5 connection
&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;mt5&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;initialize&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Initialize failed: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;mt5&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;last_error&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;quit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MetaTrader5 version: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;mt5&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;version&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Login to account
&lt;/span&gt;&lt;span class="n"&gt;account&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;12345678&lt;/span&gt;  &lt;span class="c1"&gt;# Your account number
&lt;/span&gt;&lt;span class="n"&gt;password&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;your_password&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ICMarketsSC-Demo&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;  &lt;span class="c1"&gt;# Your broker's server
&lt;/span&gt;
&lt;span class="n"&gt;authorized&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mt5&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;login&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;account&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;password&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;password&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;authorized&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Connected to account #&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;account&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;account_info&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mt5&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;account_info&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Balance: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;account_info&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;balance&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Equity: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;account_info&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;equity&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Login failed: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;mt5&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;last_error&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Get Market Data
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Get symbol info
&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;US100.cash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;  &lt;span class="c1"&gt;# Symbol name varies by broker
&lt;/span&gt;&lt;span class="n"&gt;symbol_info&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mt5&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;symbol_info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;symbol_info&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Symbol &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; not found&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Symbol: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;symbol_info&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bid: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;symbol_info&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bid&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Ask: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;symbol_info&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ask&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Spread: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;symbol_info&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;spread&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Enable symbol for trading
&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;symbol_info&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;visible&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;mt5&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;symbol_select&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Get historical data
&lt;/span&gt;&lt;span class="n"&gt;rates&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mt5&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;copy_rates_from_pos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;mt5&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;TIMEFRAME_H1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rates&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;time&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_datetime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;time&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;unit&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;tail&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;

&lt;span class="c1"&gt;# Get tick data
&lt;/span&gt;&lt;span class="n"&gt;ticks&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mt5&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;copy_ticks_from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;mt5&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;COPY_TICKS_ALL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;ticks_df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ticks&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ticks_df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;tail&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Place CFD Orders
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Prepare trade request - Market Buy
&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;US100.cash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;lot&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.1&lt;/span&gt;
&lt;span class="n"&gt;point&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mt5&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;symbol_info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;point&lt;/span&gt;
&lt;span class="n"&gt;price&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mt5&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;symbol_info_tick&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;ask&lt;/span&gt;
&lt;span class="n"&gt;deviation&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;

&lt;span class="n"&gt;request&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;action&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;mt5&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;TRADE_ACTION_DEAL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;symbol&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;volume&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;lot&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;mt5&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ORDER_TYPE_BUY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;price&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sl&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;price&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;point&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;# Stop Loss 50 points below
&lt;/span&gt;    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tp&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;price&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;point&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;# Take Profit 100 points above
&lt;/span&gt;    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;deviation&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;deviation&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;magic&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;234000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;# Expert Advisor ID
&lt;/span&gt;    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;comment&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Python CFD Bot&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type_time&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;mt5&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ORDER_TIME_GTC&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type_filling&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;mt5&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ORDER_FILLING_IOC&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;# Send order
&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mt5&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;order_send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Order result: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;retcode&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;mt5&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;TRADE_RETCODE_DONE&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Order failed: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;comment&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Order placed! Ticket: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Manage Positions
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Get all open positions
&lt;/span&gt;&lt;span class="n"&gt;positions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mt5&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;positions_get&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;positions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;pos&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;positions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Ticket: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;pos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ticket&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Symbol: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;pos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Type: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;BUY&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;pos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;type&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;SELL&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Volume: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;pos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;volume&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Profit: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;pos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;profit&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;---&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Close a specific position
&lt;/span&gt;&lt;span class="n"&gt;position_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;12345678&lt;/span&gt;
&lt;span class="n"&gt;position&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mt5&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;positions_get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ticket&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;position_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;pos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;position&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;close_request&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;action&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;mt5&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;TRADE_ACTION_DEAL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;symbol&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;pos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;volume&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;pos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;volume&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;mt5&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ORDER_TYPE_SELL&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;pos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;type&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="n"&gt;mt5&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ORDER_TYPE_BUY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;position&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;pos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ticket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;price&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;mt5&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;symbol_info_tick&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;bid&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;pos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;type&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="n"&gt;mt5&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;symbol_info_tick&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;ask&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;deviation&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;magic&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;234000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;comment&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Close by Python&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type_time&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;mt5&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ORDER_TIME_GTC&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type_filling&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;mt5&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ORDER_FILLING_IOC&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mt5&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;order_send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;close_request&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Close result: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Shutdown MT5 connection
&lt;/span&gt;&lt;span class="n"&gt;mt5&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;shutdown&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Complete CFD Trading Bot Example
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;oandapyV20&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;oandapyV20.endpoints.instruments&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;instruments&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;oandapyV20.endpoints.orders&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;oandapyV20.endpoints.positions&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;positions&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;oandapyV20.endpoints.accounts&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;accounts&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;numpy&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;logging&lt;/span&gt;

&lt;span class="c1"&gt;# Setup logging
&lt;/span&gt;&lt;span class="n"&gt;logging&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;basicConfig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;level&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;logging&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;INFO&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;logger&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;logging&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getLogger&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;__name__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CFDTradingBot&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;access_token&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;account_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;environment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;practice&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;oandapyV20&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;API&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;access_token&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;access_token&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;environment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;environment&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;account_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;account_id&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;position&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_account_balance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;accounts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;AccountSummary&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;account_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;account&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;balance&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_candles&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;instrument&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;granularity&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;H1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;count&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;granularity&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;granularity&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;instruments&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;InstrumentsCandles&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;instrument&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;instrument&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;candle&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;candles&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;candle&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;complete&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
                &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
                    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;time&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;candle&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;time&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
                    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;open&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;candle&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;mid&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;o&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt;
                    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;high&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;candle&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;mid&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;h&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt;
                    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;low&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;candle&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;mid&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;l&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt;
                    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;close&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;candle&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;mid&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;c&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt;
                &lt;span class="p"&gt;})&lt;/span&gt;

        &lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;time&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_datetime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;time&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;calculate_signals&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fast_period&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;slow_period&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;SMA_fast&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;close&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;rolling&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;window&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;fast_period&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;mean&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;SMA_slow&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;close&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;rolling&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;window&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;slow_period&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;mean&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

        &lt;span class="c1"&gt;# Generate signals
&lt;/span&gt;        &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;signal&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
        &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;loc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;SMA_fast&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;SMA_slow&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;signal&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;   &lt;span class="c1"&gt;# BUY
&lt;/span&gt;        &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;loc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;SMA_fast&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;SMA_slow&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;signal&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;  &lt;span class="c1"&gt;# SELL
&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_open_positions&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;instrument&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;positions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;OpenPositions&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;account_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;pos&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;positions&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[]):&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;pos&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;instrument&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;instrument&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="n"&gt;long_units&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pos&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;long&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;units&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
                &lt;span class="n"&gt;short_units&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pos&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;short&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;units&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
                &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;long_units&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;short_units&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;place_order&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;instrument&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;units&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;stop_distance&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;take_profit_distance&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;order_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;order&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;instrument&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;instrument&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;units&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;units&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MARKET&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;positionFill&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;DEFAULT&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;stopLossOnFill&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;distance&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;stop_distance&lt;/span&gt;&lt;span class="p"&gt;)},&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;takeProfitOnFill&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;distance&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;take_profit_distance&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;OrderCreate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;account_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;order_data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;close_position&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;instrument&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;direction&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;long&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;close_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;direction&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;Units&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ALL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;positions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;PositionClose&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;account_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;instrument&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;instrument&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;close_data&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;
        &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;warning&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;No position to close: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;instrument&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;NAS100_USD&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;units&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;interval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Starting CFD Trading Bot for &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;instrument&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Account Balance: $&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_account_balance&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="c1"&gt;# Get market data
&lt;/span&gt;                &lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_candles&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;instrument&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;calculate_signals&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

                &lt;span class="n"&gt;current_signal&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;signal&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;iloc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
                &lt;span class="n"&gt;current_price&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;close&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;iloc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
                &lt;span class="n"&gt;current_position&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_open_positions&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;instrument&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

                &lt;span class="n"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Price: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;current_price&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; | Signal: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;current_signal&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; | Position: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;current_position&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

                &lt;span class="c1"&gt;# Trading logic
&lt;/span&gt;                &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;current_signal&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;current_position&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                    &lt;span class="c1"&gt;# Close short if exists
&lt;/span&gt;                    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;current_position&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;close_position&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;instrument&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;short&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                        &lt;span class="n"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Closed SHORT position&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

                    &lt;span class="c1"&gt;# Open long
&lt;/span&gt;                    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;place_order&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;instrument&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;units&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                    &lt;span class="n"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Opened LONG: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

                &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;current_signal&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;current_position&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                    &lt;span class="c1"&gt;# Close long if exists
&lt;/span&gt;                    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;current_position&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;close_position&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;instrument&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;long&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                        &lt;span class="n"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Closed LONG position&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

                    &lt;span class="c1"&gt;# Open short
&lt;/span&gt;                    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;place_order&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;instrument&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;units&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                    &lt;span class="n"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Opened SHORT: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

                &lt;span class="c1"&gt;# Wait before next iteration
&lt;/span&gt;                &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;interval&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;KeyboardInterrupt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bot stopped by user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Error: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="c1"&gt;# Run the bot
&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;bot&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;CFDTradingBot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;access_token&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_ACCESS_TOKEN&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;account_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_ACCOUNT_ID&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;environment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;practice&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;  &lt;span class="c1"&gt;# Use "practice" for demo
&lt;/span&gt;    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;instrument&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;NAS100_USD&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;# NASDAQ 100 CFD
&lt;/span&gt;        &lt;span class="n"&gt;units&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;interval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;300&lt;/span&gt;  &lt;span class="c1"&gt;# Check every 5 minutes
&lt;/span&gt;    &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  CFD Trading Hours
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Index CFDs
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Index&lt;/th&gt;
&lt;th&gt;Trading Hours (ET)&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;US100/NAS100&lt;/td&gt;
&lt;td&gt;Sun 6PM - Fri 5PM&lt;/td&gt;
&lt;td&gt;1hr daily break&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;US500/SPX500&lt;/td&gt;
&lt;td&gt;Sun 6PM - Fri 5PM&lt;/td&gt;
&lt;td&gt;1hr daily break&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;US30/DJ30&lt;/td&gt;
&lt;td&gt;Sun 6PM - Fri 5PM&lt;/td&gt;
&lt;td&gt;1hr daily break&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GER40/DAX&lt;/td&gt;
&lt;td&gt;3AM - 5PM&lt;/td&gt;
&lt;td&gt;Cash session&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UK100/FTSE&lt;/td&gt;
&lt;td&gt;3AM - 5PM&lt;/td&gt;
&lt;td&gt;Cash session&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Forex CFDs
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;24/5 Trading&lt;/strong&gt;: Sunday 5PM ET to Friday 5PM ET&lt;/li&gt;
&lt;li&gt;Continuous trading with no daily breaks&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Stock CFDs
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Follow respective exchange hours&lt;/li&gt;
&lt;li&gt;US stocks: 9:30 AM - 4:00 PM ET&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Risk Management for CFD Trading
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Position Sizing Formula
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;calculate_cfd_position_size&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;account_balance&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;risk_percent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;stop_loss_points&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;point_value&lt;/span&gt;
&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
    Calculate position size for CFD trading

    Args:
        account_balance: Total account value
        risk_percent: % of account to risk (e.g., 0.01 = 1%)
        stop_loss_points: Distance to stop loss in points
        point_value: Value per point per lot

    Returns:
        Position size in lots
    &lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;risk_amount&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;account_balance&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;risk_percent&lt;/span&gt;
    &lt;span class="n"&gt;position_size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;risk_amount&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;stop_loss_points&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;point_value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;position_size&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Example: $10,000 account, 1% risk, 50 point SL, $1/point
&lt;/span&gt;&lt;span class="n"&gt;position&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;calculate_cfd_position_size&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.01&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Position size: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;position&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; lots&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# Output: 2.0 lots
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Risk Management Rules
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Never risk more than 1-2%&lt;/strong&gt; per trade&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Always use stop losses&lt;/strong&gt; - automate them&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Account for overnight swap fees&lt;/strong&gt; in your calculations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Be aware of leverage&lt;/strong&gt; - it amplifies losses too&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Start with demo accounts&lt;/strong&gt; - test thoroughly first&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitor margin levels&lt;/strong&gt; - avoid margin calls&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;CFD trading offers a flexible way to access global markets with leverage, but requires careful risk management. With Python automation, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Build custom trading strategies&lt;/strong&gt; using technical indicators&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automate order execution&lt;/strong&gt; with proper risk controls&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backtest strategies&lt;/strong&gt; before going live&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitor multiple markets&lt;/strong&gt; simultaneously&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Recommended Learning Path
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Start with a demo account&lt;/strong&gt; on OANDA or IG Markets&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Learn the API&lt;/strong&gt; using the examples above&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build simple strategies&lt;/strong&gt; (moving averages, RSI)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backtest thoroughly&lt;/strong&gt; before live trading&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Start small&lt;/strong&gt; with minimal position sizes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scale gradually&lt;/strong&gt; as you gain confidence&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://labs.ig.com/" rel="noopener noreferrer"&gt;IG Markets API Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.oanda.com/" rel="noopener noreferrer"&gt;OANDA v20 API Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ig-python/trading-ig" rel="noopener noreferrer"&gt;trading-ig Python Library&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://oandapyv20.readthedocs.io/" rel="noopener noreferrer"&gt;oandapyV20 Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.mql5.com/en/docs/python_metatrader5" rel="noopener noreferrer"&gt;MetaTrader 5 Python Integration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nittey/xStation5_XTB-api-python" rel="noopener noreferrer"&gt;XTB API GitHub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Disclaimer: CFDs are complex instruments and come with a high risk of losing money rapidly due to leverage. 67-80% of retail investor accounts lose money when trading CFDs. You should consider whether you understand how CFDs work and whether you can afford to take the high risk of losing your money. This article is for educational purposes only and does not constitute financial advice.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>trading</category>
      <category>finance</category>
      <category>automation</category>
    </item>
    <item>
      <title>Tech Pulse: December 23, 2025 - AI, Cybersecurity &amp; Development News Roundup</title>
      <dc:creator>krlz</dc:creator>
      <pubDate>Tue, 23 Dec 2025 02:56:36 +0000</pubDate>
      <link>https://open.forem.com/krlz/tech-pulse-december-23-2025-ai-cybersecurity-development-news-roundup-1jeh</link>
      <guid>https://open.forem.com/krlz/tech-pulse-december-23-2025-ai-cybersecurity-development-news-roundup-1jeh</guid>
      <description>&lt;p&gt;Welcome to the daily tech roundup! Here are the most important stories across technology, cybersecurity, and software development for December 23, 2025.&lt;/p&gt;




&lt;h2&gt;
  
  
  Tech Industry Highlights
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ChatGPT Launches Your Year with ChatGPT
&lt;/h3&gt;

&lt;p&gt;OpenAI is rolling out its own version of Spotify Wrapped! The annual review feature called Your Year with ChatGPT is now available to eligible consumers in the US, Canada, UK, Australia, and New Zealand.&lt;/p&gt;

&lt;h3&gt;
  
  
  SoftBank Racing to Complete $22.5B OpenAI Investment
&lt;/h3&gt;

&lt;p&gt;SoftBank is pushing to finalize a massive $22.5 billion funding commitment to OpenAI by year-end. The company is exploring multiple financing options, including selling public-market holdings and tapping additional credit capacity.&lt;/p&gt;

&lt;h3&gt;
  
  
  NIST Invests $20M in AI Centers
&lt;/h3&gt;

&lt;p&gt;NIST has expanded collaboration with MITRE Corporation, investing $20 million to establish two centers focused on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI-based solutions for U.S. manufacturing&lt;/li&gt;
&lt;li&gt;Cybersecurity for critical infrastructure&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Major Startup Funding Rounds
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Lovable&lt;/strong&gt; (Swedish AI startup): $330M Series B at $6.6B valuation, led by Google CapitalG&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Erebor Bank&lt;/strong&gt;: $350M for crypto-native banking infrastructure&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ZeroAvia&lt;/strong&gt;: $150M Series D for zero-emission commercial flight&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Cybersecurity News
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Government Advisories
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;BRICKSTORM Backdoor Update&lt;/strong&gt;: CISA, NSA, and Canadian Cyber Security Centre released updated IOCs and detection signatures for Rust-based samples with advanced persistence mechanisms and encrypted WebSocket C2 capabilities.&lt;/p&gt;

&lt;h3&gt;
  
  
  Major Law Enforcement Action
&lt;/h3&gt;

&lt;p&gt;The DOJ charged &lt;strong&gt;54 individuals&lt;/strong&gt; in an ATM jackpotting scheme using Ploutus malware, linked to the Tren de Aragua gang. The attacks caused &lt;strong&gt;$40.73 million&lt;/strong&gt; in U.S. losses since 2021.&lt;/p&gt;

&lt;h3&gt;
  
  
  Nation-State Threats
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;North Korean hackers&lt;/strong&gt; stole at least $2.02 billion in cryptocurrency in 2025 (51% increase YoY)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Russia&lt;/strong&gt; blamed for destructive cyber attacks against Denmark, including water utility attacks and DDoS campaigns&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Iranian Infy APT&lt;/strong&gt; resurfaces targeting victims across multiple countries with updated Foudre and Tonnerre malware&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Critical Vulnerabilities
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CVE-2025-37164&lt;/strong&gt; (CVSS 10.0): HPE OneView Software - unauthenticated RCE&lt;/li&gt;
&lt;li&gt;Active exploits reported in Fortinet, SonicWall, Cisco, and WatchGuard products&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Major Data Breaches
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Organization&lt;/th&gt;
&lt;th&gt;Impact&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;700Credit&lt;/td&gt;
&lt;td&gt;5.6M+ auto dealership customers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PornHub via Mixpanel&lt;/td&gt;
&lt;td&gt;200M+ Premium user records&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;University of Sydney&lt;/td&gt;
&lt;td&gt;27,000+ individuals&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Software Development Updates
&lt;/h2&gt;

&lt;h3&gt;
  
  
  AI Tools and Model Releases
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Anthropic&lt;/strong&gt; made Skills an open standard&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GPT-5.2-Codex&lt;/strong&gt; was released&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google Gemini 3 Flash&lt;/strong&gt; announced - optimized for speed and iterative development&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Key Industry Trends
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Agents Are Production-Ready&lt;/strong&gt;: By the end of 2025, AI agents are doing operational work - updating infrastructure, resolving customer issues, moving money, and managing SaaS tools.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Docker Makes Security Accessible&lt;/strong&gt;: Docker Hardened Images (DHI) are now available at no cost, providing secure-by-default, minimal, production-ready foundations for all developers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Observability Evolution&lt;/strong&gt;: Dynatrace announced support for Google Cloud agentic AI tools via Agent-to-Agent (A2A) protocol, now under Linux Foundation governance.&lt;/p&gt;

&lt;h3&gt;
  
  
  Apple Developer Updates
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;iOS 18.4, macOS 15.4, and other betas&lt;/strong&gt; now available&lt;/li&gt;
&lt;li&gt;New Australian law (effective Dec 10): Social media platforms must prevent users under 16 from having accounts&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Looking Ahead to 2026
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Space Data Centers&lt;/strong&gt;: Conversation around data centers in space is heating up&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Energy Infrastructure&lt;/strong&gt;: Critical importance for AI and tech growth&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI Environmental Impact&lt;/strong&gt;: Growing concerns about data center water consumption in drought-prone regions&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://techcrunch.com/" rel="noopener noreferrer"&gt;TechCrunch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://thehackernews.com/" rel="noopener noreferrer"&gt;The Hacker News&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cisa.gov/" rel="noopener noreferrer"&gt;CISA Advisories&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://sdtimes.com/" rel="noopener noreferrer"&gt;SD Times&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.docker.com/blog/" rel="noopener noreferrer"&gt;Docker Blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://research.checkpoint.com/" rel="noopener noreferrer"&gt;Check Point Research&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Stay informed, stay secure, and keep building!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>news</category>
      <category>security</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
