Faits :
A.
A.a. La société B._ SA (ci-après: la banque, ou B._), sise à... (VD), est active dans le trading en ligne; elle ne fournit aucun conseil en investissement, ni service de gestion de fortune. Cette banque permet à sa clientèle d'effectuer en ligne des transactions boursières ainsi que des opérations de négoce sur devises (transactions Forex). Pour ce faire, elle a sa propre plateforme informatique intitulée P._.
Le Forex est le marché sur lequel les devises convertibles sont échangées l'une contre l'autre à des taux de change variant en permanence. Il n'existe pas une place unique d'échange, si bien que le traitement d'une paire de devises donnée (par exemple la paire EUR/CHF) peut s'opérer de manière électronique sur la plateforme de tout acteur du marché offrant ce service. L'acteur en question examine les prix proposés par les fournisseurs de liquidités et choisit le taux qu'il entend proposer à ses clients. Le client décide sur cette base de passer un ordre d'achat ou de vente. Le prix auquel une paire de devises est échangée à un moment donné peut donc différer selon la plateforme utilisée.
Les transactions Forex sont hautement spéculatives. La banque conseille à ses clients de réduire les risques de pertes en recourant notamment aux ordres " stop-loss ". Ce type d'ordre tend à l'achat ou à la vente de devises sitôt atteint le taux spécifié par le client (cf. au surplus consid. 5.3).
A.b. Le 6 septembre 2011, la Banque Nationale Suisse (ci-après: la BNS) a instauré un taux plancher de CHF 1.20 pour EUR 1.00 afin de répondre aux préoccupations croissantes liées à la hausse du franc suisse.
A.c. A._ (ci-après: le client) dispose d'une certaine expérience dans le domaine financier. Le 3 septembre 2014, il a ouvert un compte trading auprès de B._. Il a commencé dès le lendemain à effectuer des transactions Forex sur la paire EUR/CHF au moyen de la plateforme P._.
L'accès à celle-ci ne peut se faire sans que l'utilisateur ait accepté un contrat dénommé "e-forex".
Ce contrat-cadre contient notamment les clauses suivantes:
"4.7 (...)
(...)
v) Vous reconnaissez et acceptez que B._ n'a aucune obligation d'offrir des cours à tout moment. Dans le cas où B._ n'offrirait pas de cours pendant une certaine période, vous ne pourrez pas ouvrir ou liquider une position par le biais de la Plateforme e-forex et vos ordres ne seront pas exécutés.
(...)
4.13 Acceptation des risques
(...)
iv) Vous reconnaissez et acceptez que dans certaines conditions de marché, il sera difficile, voire impossible d'exécuter des ordres à un prix déterminé ou de liquider certaines positions, d'estimer un prix juste ou acceptable et d'estimer l'exposition au risque. Cela peut notamment arriver lorsque le marché est illiquide ou lors d'une défaillance de système électronique ou de télécommunications ou dans un cas de force majeure. Le fait de placer un ordre de type " stop-loss " ne garantit pas nécessairement une limitation du risque car, dans certaines conditions de marché, votre ordre ne pourra pas être exécuté. B._ ne peut pas garantir qu'un ordre d'achat ou de vente sera exécuté au prix limite que vous avez fixé. Ainsi, les opérations de liquidation visant à exclure ou à limiter les risques résultant de transactions sur instruments financiers, qu'elles soient effectuées par vous-même ou par B._, peuvent ne pas être réalisables ou l'être uniquement à un prix très défavorable.
(...) "
A.d. Dès le 22 octobre 2014, le client s'est construit une position consistant en l'achat de 2'000'000 EUR/CHF au cours de 1.204119.
Le 8 janvier 2015, il a donné un ordre " stop-loss " au cours de 1.194.
A.e. Le 15 janvier 2015, la BNS a annoncé à 10 h 30 qu'elle abandonnait le taux plancher. Les marchés ont été pris par surprise; s'en est suivi un vent de panique. Le franc suisse s'est fortement apprécié par rapport à l'euro dès 10 heures 30 minutes 48-49 secondes; dès ce moment, les cotations traitables sur le marché interbancaire sont devenues inexistantes ("illiquidité" du marché).
A 10:41:03, la banque a suspendu le négoce sur la paire de devises EUR/CHF pour le reprendre à 11:35:32.
Comme prévu par le contrat e-forex, la position du client a été liquidée automatiquement à 11:35, entre la 33ème et la 35ème seconde, à des cours nettement inférieurs (entre 1.03989 et 1.04390) à celui auquel elle avait été acquise (1.204119).
A la suite de cette opération, et en considération des actifs disponibles, le compte du client affichait un solde négatif de CHF 287'641.95. La banque en a exigé le paiement - en vain.
A.f. Le 24 septembre 2015, la société F._ SA a rédigé un rapport concernant les événements du 15 janvier 2015, à la demande de la banque. Cette fiduciaire a constaté que selon la chronologie fournie par sa mandante, quelques secondes seulement après l'annonce de la BNS, soit à 10:30:50, la plupart des fournisseurs de liquidités n'offraient plus de cours pour la paire EUR/CHF et ne donnaient que des cours indicatifs. L'analyse des cotations transmises par les fournisseurs de liquidités confirmait la diminution considérable de la liquidité du marché après l'annonce de la BNS; la situation ne s'était normalisée qu'à compter de 11:45. La fiduciaire n'a trouvé aucune trace d'un traitement inéquitable des clients.
B.
B.a. Par requête de conciliation du 26 avril 2016, la banque a ouvert action contre le client devant la Chambre patrimoniale du canton de Vaud. Dans sa demande du 19 octobre 2016, elle prétendait au paiement de 287'642 fr. plus intérêts.
La banque a versé au dossier une expertise réalisée par les professeurs E1._ et E2._ - enseignant tous deux à l'Université de Zurich - dans le cadre d' une procédure parallèle l'opposant à d'autres clients à propos des événements du 15 janvier 2015.
Ces experts ont notamment fait les constatations suivantes:
- un nombre important d'ordres avaient été rejetés par le système de la banque sur la paire EUR/CHF. Ce fait était imputable non pas à une défaillance du système, mais au manque de liquidités sur le marché interbancaire dès 10:30:49;
- un certain nombre d'ordres déclenchés durant la minute de 10:30 n'avaient été exécutés que bien plus tard. Ceci était dû à l'inexistence de cotations traitables sur le marché interbancaire à partir de 10:30:48-10:30:49.
Par jugement du 5 juillet 2019, la Chambre patrimoniale a admis la demande de la banque et condamné le client à lui payer 287'641 fr. 95 plus intérêts.
B.b. Le 18 décembre 2020, le Tribunal cantonal vaudois a rejeté l'appel formé par le client et sa requête d'assistance judiciaire en faisant usage de l'art. 312 al. 1 CPC, c'est-à-dire sans consulter la partie adverse.
Les juges cantonaux ont en substance développé l'analyse suivante:
- Les parties étaient liées par un contrat-cadre (le contrat e-forex) et par des contrats de vente successivement conclus lors de chaque opération de trading effectuée sur la plateforme P._.
- Le litige portait sur l'inexécution d'un ordre conditionnel de vendre une devise une fois atteint le taux de 1.194. L'application du système de liquidation automatique n'était plus discutée en appel.
- Il n'était pas prouvé que la condition suspensive se soit produite, c'est-à-dire que le taux de 1.194 ait été atteint le 15 janvier 2015. Ce constat suffisait à sceller le sort de la discussion.
- Au demeurant, le contrat e-forex complétait les règles de la vente conditionnelle. Or, celui-ci prévoyait que la banque n'avait aucune obligation d'offrir des cours à tout moment (art. 4.7/v.). En outre, dans certaines conditions du marché, un ordre " stop-loss " pouvait ne pas être exécuté. La banque ne garantissait pas qu'un ordre fût exécuté au prix limite fixé par le client (art. 4.13/iv.). L'inexécution de l'ordre litigieux s'inscrivait dans des conditions de marché exceptionnelles et entrait dans le champ d'application desdites clauses.
- L'art. 4.13/iv. était une clause standardisée pouvant être qualifiée de condition générale au sens de l'art. 8 LCD. Elle n'avait rien d'illicite ou d'abusif au sens de cette disposition et n'était pas entachée de nullité. On pouvait du reste se demander si l'art. 8 LCD ne visait pas uniquement les actes de consommation courante, dont ne faisait pas partie l'opération de négoce litigieuse.
C.
Agissant par la voie du recours en matière civile, le client a invité le Tribunal fédéral à rejeter l'action intentée par la banque et, en tout état, à l'exonérer des frais judiciaires de deuxième instance.
La banque intimée a conclu au rejet du recours.
Le recourant a tenu à déposer une réplique qui a suscité une duplique de son adverse partie.
L'autorité précédente s'est référée à son arrêt.
La Présidente de la cour de céans a refusé l'effet suspensif sollicité dans le cadre du recours.
Considérant en droit :
1.
La voie du recours en matière civile est ouverte dans le cas présent. En effet, les conditions de recevabilité sont réalisées sur le principe, notamment celles afférentes au délai de recours et à la valeur litigieuse minimale de 30'000 fr. (art. 100 al. 1 LTF en lien avec l'art. 46 al. 1 let. c LTF, respectivement art. 74 al. 1 let. b LTF).
2.
A ce stade, le recourant reproche à la banque intimée d'avoir violé ses obligations contractuelles en s'abstenant d'exécuter le 15 janvier 2015 son ordre " stop-loss " portant sur la vente de sa position au taux de 1.194.
Le recourant décoche des moyens de fait et de droit contre l'arrêt cantonal:
- En fait, la Cour d'appel aurait accordé à tort la qualité d'expertise judiciaire au rapport des professeurs E1._ et E2._.
Elle aurait aussi violé le droit fédéral en établissant l'état de fait.
- En droit, la Cour aurait dû admettre que la banque avait enfreint l'obligation contractuelle d'exécuter l'ordre " stop-loss ", que les conditions d'application de la clause 4.13/iv. du contrat e-forex n'étaient pas réalisées et que celle-ci contrevenait à l'art. 8 LCD.
La Cour aurait également rejeté à tort sa requête d'assistance judiciaire.
Ces griefs seront examinés successivement.
3.
3.1. Le recourant conteste que le rapport des professeurs E1._ et E2._ (let. B.a supra) puisse avoir rang d'expertise judiciaire. Les juges vaudois ne lui auraient pas offert la possibilité de se prononcer sur la personne des experts, ni de poser des questions complémentaires. Qui plus est, les litiges à l'origine dudit rapport seraient "distincts et différents [de] celui de la présente procédure".
3.2. L'autorité précédente a rejeté le grief non sans avoir relevé qu'il était insuffisamment motivé. Le recours ne consacre aucun développement à cet argument alternatif, ce qui pourrait justifier un refus d'entrée en matière (ATF 142 III 364 consid. 2.4 p. 368; 133 IV 119 consid. 6.3). Peu importe cependant, vu le sort qui doit être réservé au grief.
3.3. Selon une jurisprudence citée par le recourant, le juge civil peut utiliser, au titre d'expertise judiciaire, une expertise mise en oeuvre par une autre autorité dans une autre procédure. Une telle expertise "extérieure" a valeur probante dans la mesure où le juge civil respecte le droit d'être entendu des parties. Celles-ci doivent pouvoir prendre position sur le contenu de l'expertise, s'exprimer sur la personne de l'expert et poser des questions complémentaires. L'expertise extérieure est alors dotée de la même valeur probatoire qu'une expertise ordonnée par le juge civil lui-même, étant entendu qu'il en apprécie librement la force probante et reste libre d'ordonner une nouvelle expertise sur les mêmes questions si l'expertise extérieure prête le flanc à la critique (ATF 140 III 24 consid. 3.3.1.3; arrêts 4A_707/2016 du 29 mai 2017 consid. 4.2.2; 4A_301/2016 du 15 décembre 2016 consid. 7.2.2).
En l'occurrence, les professeurs E1._ et E2._ se sont prononcés en qualité d'experts dans une procédure civile parallèle opposant B._ à d'autres clients "également en lien avec les suites des événements du 15 janvier 2015", selon les explications de l'autorité précédente qui a aussi constaté la présence d'informations générales sur la conclusion du contrat e-forex. La lecture du rapport confirme le bien-fondé de ces précisions, et les dénégations non étayées qu'oppose le recourant n'y changent rien.
Par ailleurs, le recourant objecte vainement avoir été privé de son droit d'être entendu au motif que le juge délégué ne l'a pas invité à se prononcer sur la personne des experts ou à poser des questions complémentaires. Si le magistrat instructeur n'a certes pas formellement offert ces possibilités au recourant, il n'y a pas pour autant matière à admettre son grief.
La partie adverse a en effet déposé une écriture contenant des nova en lien avec l'expertise extérieure (composée de deux rapports datés des 2 et 13 juillet 2018). Le juge a admis l'introduction de ces éléments nouveaux en précisant que la force probante de l'expertise serait appréciée librement dans le cadre du jugement à intervenir. Il a imparti au recourant - respectivement à son avocate - un délai "pour se déterminer sur les allégués nouveaux" (courrier du 9 octobre 2018).
Force est d'admettre que dans ces circonstances, un justiciable représenté par une avocate brevetée réputée au fait de la jurisprudence publiée devait saisir l'occasion de faire des remarques sur l'expertise extérieure, respectivement discuter la personne des experts et/ou suggérer des questions complémentaires. Il n'en a rien été, et à ce stade, le recourant n'indique toujours pas quels arguments il eût aimé formuler contre l'expertise externe, méconnaissant ainsi que le droit d'être entendu n'est pas une fin en soi (ATF 143 IV 380 consid. 1.4.1; arrêt 4D_76/2020 du 2 juin 2021 consid. 4.2).
Il s'ensuit le rejet du grief.
4.
4.1. Le recourant réfute avoir accepté le contrat e-forex le 4 septembre 2014, soit juste avant qu'il procède aux premières transactions Forex sur la plateforme.
4.2. La cour cantonale a constaté à cet égard que l'accès à la plateforme P._ ne pouvait se faire sans que l'utilisateur eût accepté au préalable le contrat e-forex en s'inscrivant sur ladite plateforme. Ce fait ressortait non seulement de documents émis par la banque - soit le "processus d'ouverture de compte P._" et la "brochure d'information P._" -, mais aussi du rapport d'expertise E1._ et E2._. Le vice-directeur de la banque l'avait encore confirmé lors de son interrogatoire.
L'arrêt attaqué cite les deux experts, qui ont jugé "extrêmement improbable qu'un utilisateur ait pu utiliser la plateforme sans avoir préalablement accepté le contrat". Il concède que le rapport ne fournit nulle explication technique quant à la manière dont le système informatique vérifie l'acceptation du contrat e-forex.
Le rapport d'expertise reproduit une page de la documentation P._ invitant le client à lire attentivement toutes les clauses contractuelles et à accepter chacun des 13 chapitres "par un clic dans la case qui se trouve en bas à gauche sur chaque page". Les experts ont en outre relevé que l'acceptation du contrat dans la base de données avait été prévue lors de la conception de la plateforme; comme le document ne permettait pas d'établir avec certitude que l'activation du compte P._ était impossible sans la signature du contrat, ils ont encore requis une pièce supplémentaire établissant que la plateforme vérifie effectivement la signature. La banque a livré un extrait du code informatique effectuant cette vérification. Sur cette base, les experts ont tiré la conclusion retranscrite au paragraphe précédent.
A l'aune de ces précisions et des explications de l'autorité précédente, on ne discerne nulle trace d'arbitraire dans son appréciation des preuves, quand bien même celles-ci ne se rapportaient pas spécifiquement au recourant. En outre, il n'était pas insoutenable de renoncer à exiger des moyens de preuve techniques supplémentaires. Il n'est pas inutile de rappeler ici que l'arbitraire ne résulte pas du seul fait qu'une autre solution serait défendable, voire préférable (ATF 144 III 145 consid. 2).
Le recourant dénonce aussi une violation des règles sur le fardeau de la preuve. A tort.
S'il convient en principe de rapporter la preuve stricte (ou preuve certaine) d'un allégué, la certitude absolue n'est pas requise; de légers doutes peuvent subsister (cf. ATF 130 III 321 consid. 3.2 p. 324; cf. ATF 141 III 569 consid. 2.2.1 p. 573). Ces préceptes ont été respectés dans le cas concret. La Cour d'appel a rappelé que les moyens de preuve devaient emporter la conviction du tribunal. En reprochant au recourant/défendeur de ne pas avoir apporté la preuve du contraire, la Cour d'appel n'a pas renversé le fardeau de la preuve pesant sur l'intimée/partie demanderesse, mais a simplement voulu signifier qu'il eût dû faire en sorte de susciter des doutes plus consistants que de légères suspicions, ce qu'il avait omis de faire.
Le grief se révèle infondé.
5.
5.1. Dans un dernier moyen de fait bicéphale, le recourant dénonce une constatation arbitraire ainsi qu'une lacune dans l'état de fait. L'autorité précédente aurait retenu à tort qu'il n'y avait plus de cotations traitables le 15 janvier 2015 à compter de 10 heures 30 minutes 48-49 secondes. De surcroît, elle aurait omis de constater que la paire de devises EUR/CHF avait atteint un cours de 1.194 avant que la banque suspende le négoce sur cette paire à 10:41:03.
5.2. La cour cantonale a effectivement constaté que le 15 janvier 2015, les cotations traitables sur le marché interbancaire étaient inexistantes pour la paire de devises EUR/CHF dès 10:30:48-49 secondes ("illiquidité" du marché).
La cour s'est fondée sur les observations des experts E1._ et E2._.
Le recourant croit discerner une contradiction logée dans l'expertise et s'appuie au surplus sur le rapport de F._ SA. Il se fourvoie.
5.3. Il faut concéder que l'expertise contient un "Tableau 5" recensant les "transactions interbancaires de la défenderesse sur la paire EUR/CHF (vente d'EUR contre des CHF) le 15 janvier 2015". Ledit tableau fait état, à 10:30:49, de 11 transactions au cours moyen pondéré de 1.19399 et au cours maximum de 1.19463 (rapport, p. 49 et 66). Elle précise également que le cours moyen des transactions effectuées à 10:30:49 était encore de 1.19468 (rapport, p. 22).
Le recourant voudrait en inférer que dans cette 49ème seconde, il était encore possible d'effectuer des transactions (au taux de 1.194 qu'il avait précisément fixé, cf. infra consid. 5.4); le marché ne serait devenu "illiquide" qu'à la 50ème seconde, comme constaté par la fiduciaire F._ SA. En d'autres termes, la banque aurait pu et dû exécuter son ordre avant de clôturer les cotations en raison de l'"illiquidité" du marché.
La lecture du rapport circonstancié des experts permet d'écarter sans ambages une telle thèse.
Il appert que l'auteur d'un ordre " stop-loss " spécifie un certain cours auquel le système de la banque doit générer un ordre d'achat ou de vente (expertise, p. 11 §1). L'ordre se déclenche au plus tôt lorsque ce cours est franchi, et plus probablement dans la seconde suivante: en effet, le prix n'est disponible qu'une fois la seconde écoulée; le système a besoin de temps pour effectuer les calculs requis (expertise, p. 65 i.f. et p. 66 § 1). Il faut distinguer entre le déclenchement de l'ordre et son exécution. Celle-ci peut être différée, et il n'y a aucune garantie d'une exécution au seuil spécifié (expertise, p. 11 § 1 et p. 21).
Le système de la banque utilisait les cotations traitables (i.e. les offres émanant de ses fournisseurs de liquidités, expertise, p. 16 i.f.) pour décider du déclenchement desdits ordres. La dernière cotation traitable (avant la survenance de l'"illiquidité") pour les achats d'euros contre des francs avait un cours supérieur à 1.1970 (expertise, p. 66 sous-note 30). Elle avait été émise par un fournisseur de liquidités à 10:30:48 et 630 centièmes, et prise en compte par le système de la banque à 10:30:48 et 777 centièmes. Les offres traitables avaient ensuite cessé. Les experts en ont déduit l'absence de liquidités à compter de 10:30:48-49 secondes (expertise, p. 17 et 102).
Les experts se sont ensuite penchés sur des ordres " stop-loss " donnés par deux clients ayant fixé le cours à 1.1985 et 1.1970. Ils ont constaté que le système de la banque avait déclenché les ordres correctement, respectivement à 10:30:48 et 10:30:49. Les transactions n'avaient eu lieu qu'à 10:39:52, respectivement à 10:39:53-54, à des cours nettement inférieurs (expertise, p. 65-68, p. 73 et p. 137). Cet écart n'était pas imputable à un dysfonctionnement du système, mais à l'absence de cotations traitables sur le marché de gré à gré utilisé par la banque (expertise, p. 78 s.).
Il appert ainsi que la dernière cotation traitable avait été émise par un fournisseur de la banque à 10:30:48.630 (à un cours supérieur à 1.1970). Le recourant ne critique pas le fait que la banque se fournissait sur un marché de gré à gré plutôt que sur la plateforme ESB (soit la plus importante plateforme pour le négoce de devises, en particulier pour la paire EUR/CHF, rapport, p. 50). Il ne conteste pas davantage que le marché soit devenu illiquide, mais dispute tout au plus du moment précis auquel situer cet événement. Il importe enfin de garder à l'esprit que l'offre de transaction à un certain cours et le déclenchement d'un ordre " stop-loss " ne coïncident pas avec l'exécution de celui-ci. Sur la base de ces éléments, la cour cantonale pouvait inférer sans arbitraire une absence de liquidités dès 10:30:48.630.
L'avis émis par la fiduciaire F._ SA, retenant un défaut de liquidités dès 10:30:50, n'est d'aucun secours au recourant. La fiduciaire a en effet tiré ce constat de la chronologie fournie par l'intimée elle-même, sans effectuer une étude aussi fouillée que celle présentée par les experts; aussi la Cour d'appel pouvait-elle privilégier cette dernière sans verser dans l'arbitraire.
5.4. Le recourant dénonce encore une lacune dans l'état de fait, qui eût dû constater que le cours sur la paire de devises EUR/CHF avait atteint 1.194 "avant la fermeture des cours par l'intimée". Les juges vaudois ont incriminé l'absence d'allégués sur le fait litigieux. Or, le recourant ne parvient pas à réfuter cet argument. Il ne propose d'autre allégué que celui articulé par la partie adverse (all. 67), selon lequel "dès l'annonce de la BNS connue, soit à compter de 10:30:50, la plupart des fournisseurs de liquidités (...) arrêtèrent de fournir des prix traitables (...) pour la paire de devises EUR/CHF, rendant le marché totalement illiquide". On n'y discerne aucune précision sur le dernier cours traitable avant la survenance de l'"illiquidité". Au surplus, les explications fournies par les experts semblent propres à reléguer aux oubliettes la thèse soutenue par le recourant: en effet, il n'apparaît pas que l'ordre " stop-loss " spécifiant un cours de 1.194 aurait pu être exécuté avant que le marché devienne "illiquide".
Le grief se révèle entièrement infondé.
6.
6.1. En droit, le recourant dénonce tout d'abord une violation des art. 184 al. 1 et 185 al. 3 CO. La banque intimée aurait failli à ses obligations contractuelles en n'exécutant pas le 15 janvier 2015 l'ordre " stop-loss " qu'il avait donné.
6.2. L'autorité précédente a retenu que la banque avait reçu du recourant un ordre de vente conditionnel et que la preuve de l'avènement de la condition suspensive (atteinte du taux de change de 1.194 le 15 janvier 2015 [avant la fermeture du marché]) n'avait pas été apportée. Le recourant s'est placé sur un terrain factuel en critiquant les constatations retenues dans l'arrêt attaqué; mal lui en a pris (cf. consid. 5.4 supra). L'état de fait déterminant ne permet pas de tirer une conclusion autre que celle des juges d'appel.
6.3. Au surplus, ceux-ci ont retenu que le recourant s'était accommodé des risques inhérents aux transactions Forex en acceptant le contrat e-forex, dont l'art. 4.13/iv. réservait la faculté de ne pas exécuter l'ordre " stop-loss " dans certaines conditions du marché et ne garantissait pas que l'ordre serait exécuté au taux fixé par le client. Les circonstances exceptionnelles du marché le 15 janvier 2015 entraient précisément dans le champ d'application de l'art. 4.13/iv.; l'absence de liquidités sur la paire de devises EUR/CHF était avérée dès 10:30:48-49.
Cette dernière analyse ne prête pas le flanc à la critique. Pour déjouer l'application de l'art. 4.13/iv. (let. A.c supra), le recourant s'appuie derechef sur une prémisse factuelle non retenue, voire erronée, à savoir que le taux de 1.194 aurait été atteint à 10:30:49.
6.4. Le recourant objecte ensuite que l'art. 4.13/iv. serait nul en raison de l'art. 8 LCD, dont la teneur est la suivante:
"Art. 8 Utilisation de conditions commerciales abusives
Agit de façon déloyale celui qui, notamment, utilise des conditions générales qui, en contradiction avec les règles de la bonne foi prévoient, au détriment du consommateur, une disproportion notable et injustifiée entre les droits et les obligations découlant du contrat."
6.4.1. La Cour d'appel a jugé que la clause 4.13 constituait une condition générale. Elle a en revanche douté que le recourant puisse être qualifié de consommateur dès lors que l'art. 8 LCD, selon divers commentateurs, viserait la consommation courante et ne saurait dès lors couvrir le négoce de devises. Quoi qu'il en soit, la Cour a exclu une violation de la LCD, en arguant du fait que l'art. 4.13/iv. n'était ni vague ni indéterminé - contrairement à ce que soutenait le recourant - et qu'il ne permettait pas à la banque intimée de refuser à sa guise l'exécution d'un ordre " stop-loss ". Comme exemples de "conditions d[u] marché" pouvant empêcher l'exécution d'un tel ordre, cette clause invoquait le caractère "illiquide" du marché, la défaillance du système électronique ou des télécommunications, ou encore la force majeure. En l'espèce, une absence de liquidités avait précisément empêché l'exécution de l'ordre. Il n'y avait pas de déséquilibre notable et injustifié.
6.4.2. L'autorité de céans n'a pas eu l'occasion de se prononcer à proprement parler sur la notion de "consommateur" utilisée à l'art. 8 LCD (arrêt 4A_275/2019 du 29 août 2019 consid. 1.4), plus précisément de trancher si la protection est limitée aux prestations de consommation courante. Tout au plus a-t-elle exclu du cercle des consommateurs une société anonyme vouée à diriger des travaux de construction, ayant contracté une assurance responsabilité civile professionnelle auprès d'une compagnie (arrêt 4A_152/2017 du 2 novembre 2017 consid. 5.3). Il n'est guère contesté en doctrine qu'une personne morale dotée d'un but commercial ne constitue pas un consommateur au sens de l'art. 8 LCD (cf. par ex. HELMUT HEISS, in UWG Kommentar, [Heizmann/Loacker éd.] 2018, n° 119 ad art. 8 LCD; PASCAL PICHONNAZ, in Commentaire romand, Loi contre la concurrence déloyale, 2017, nos 128-130 ad art. 8 LCD; ESTHER WIDMER, Missbräuchliche Geschäftsbedingungen nach Art. 8 UWG [...], 2015, n. 312; THOMAS KOLLER, Art. 8 UWG: Eine Auslegeordnung [...], in PJA 2014 p. 25 i.f. et s.; FLORENT THOUVENIN, in Basler Kommentar, Bundesgesetz gegen den unlauteren Wettbewerb [UWG], 2013, n° 82 ad art. 8 LCD).
En revanche, les auteurs sont divisés quant au point de savoir si la protection de l'art. 8 LCD doit se restreindre aux prestations de consommation courante - non sans déplorer au passage l'imprécision du législateur. A cette question, d'aucuns apportent une réponse affirmative en s'appuyant sur les définitions données aux art. 32 al. 2 CPC et 120 al. 1 LDIP, en prônant notamment une harmonisation avec le droit procédural (cf. entre autres HESS/RUCKSTUHL, AGB-Kontrolle nach dem neuen Art. 8 UWG [...], in PJA 2012 p. 1194-1196; SYLVAIN MARCHAND, Art. 8 LCD: Un léger mieux sur le front des intempéries, in REAS 2011 p. 330; ANDREAS FURRER, Eine AGB-Inhaltskontrolle in der Schweiz? [...], in REAS 2011 p. 326 let. b, suivi par KUT/STAUBER, Die UWG-Revision vom 17. Juni 2011 im Überblick, in Jusletter du 20 février 2012, n. 115, qui jugent cette solution défendable ["vertretbar"]). D'autres préconisent en revanche une interprétation plus large ne se confinant pas aux prestations de consommation courante (cf. notamment WIDMER, op. cit., nn. 305-321 et les auteurs cités en sous-note 668; HEISS, op. cit., nos 141-144 ad art. 8 LCD et les auteurs en sous-note 432; PICHONNAZ, op. cit., n° 131 ad art. 8 LCD; THOMAS PROBST, in Schweizerisches Recht der Allgemeinen Geschäftsbedingungen, 2016, nn. 501 s.; KOLLER, op. cit., p. 26 s.; THOUVENIN, op. cit., n° 83 ad art. 8 LCD). Ce courant doctrinal plaide notamment que si l'on défend une notion restrictive du consommateur telle qu'à l'art. 32 al. 2 CPC, l'art. 8 LCD pourrait bien rester lettre morte: la consommation courante concerne en effet des actes de la vie quotidienne qui sont rarement régis (à quelques exceptions près) par des conditions générales. L'art. 210 al. 4 let. b CO, adopté neuf mois plus tard, se base sur une conception large du contrat de consommateur (KOLLER, ibidem). La directive topique de l'Union européenne ne contient pas non plus une limitation à la consommation courante. Le but de la réglementation s'opposerait aussi à une interprétation trop restrictive - tout comme la systématique de la loi: en effet, d'autres dispositions de la LCD (art. 3 al. 1 let. n, art. 16, 19 et 24) utilisent la notion de consommateur, notamment en lien avec l'obligation d'indiquer les prix aux consommateurs (art. 24 LCD). Or, l'art. 2 al. 2 de l'ordonnance y relative (OIP; RS 942.211) contient une définition du consommateur qui n'inclut pas le critère restrictif de la consommation courante (E. WIDMER, op. cit., n. 308). Non plus que l'art. 3 de la loi fédérale sur le crédit à la consommation (LCC; RS 221.214.1), lequel peut être relié à l'art. 3 al. 1 let. n LCD (THOUVENIN, op. cit., n° 83 ad art. 8 LCD).
Les travaux législatifs ne sont pas d'un grand secours (PROBST, op. cit., n. 464). A l'origine, le Conseil fédéral s'était refusé à restreindre l'application de l'art. 8 LCD aux rapports contractuels avec les consommateurs, écartant ainsi une suggestion faite en cours de consultation, inspirée par une directive européenne sur les clauses abusives (Message du 2 septembre 2009 concernant la modification de la loi fédérale contre la concurrence déloyale, FF 2009 5568 § 1 et art. 8 du Projet in FF 2009 5579 s.; E. WIDMER, op. cit., n. 197). Le Conseil National a jugé que la règle proposée restreignait par trop la liberté contractuelle. Un compromis politique a été trouvé in extremis grâce à l'insertion de la phrase "au détriment du consommateur", sans qu'on dispose de détails précis à ce sujet (cf. l'historique retracé par E. WIDMER, op. cit., nn. 185 ss, notamment 197, 205 et 207 s.). Tout au plus a-t-on exprimé le refus d'appliquer l'article aux relations entre des sujets de droit agissant à titre commercial-professionnel (E. WIDMER, op. cit., n. 315 et la réf. citée), respectivement aux petites et moyennes entreprises (PME; THOUVENIN, op. cit., n° 79 ad art. 8 LCD).
Les arguments avancés par les partisans d'une conception large de la notion de consommateur sont circonstanciés; il faut leur reconnaître une certaine consistance. La cour de céans est toutefois dispensée de trancher cette question délicate dès lors que d'autres motifs évidents s'opposent déjà à l'application de l'art. 8 LCD.
6.4.3. L'autorité précédente a expliqué de façon convaincante que l'art. 4.13/iv. du contrat e-forex ne donnait pas un blanc-seing à la banque intimée, laquelle avait agi dans une des situations d'exception énoncées par cette clause. Le contrat e-forex n'était pas inéquitable et n'instituait pas un déséquilibre notable et injustifié. Qui plus est, la banque n'avait pas profité du manque d'expérience ou de connaissances du client, lequel disposait d'une certaine expérience dans le domaine financier.
N'en déplaise au recourant, le fait que le risque d'"illiquidité" du marché doive être assumé par le client plutôt que par un établissement financier "régulé, capitalisé, et organisé de manière à pouvoir supporter des problèmes de liquidité" ne suffit pas à infléchir l'analyse des juges cantonaux. Il insinue que le risque devrait être assumé par celui des partenaires qui a l'assise financière la plus élevée. Tel n'est pas le sens de l'art. 8 LCD. Le client qui, par des transactions sur devises, peut obtenir des profits vertigineux doit aussi assumer les risques proportionnels inhérents à cette forme de poker; l'autorité précédente a rappelé que le marché des changes est extrêmement volatile et peut provoquer des gains comme des pertes démesurés, voire illimités. Le contrat e-forex, qui n'a été reproduit ci-dessus que très partiellement, contient suffisamment d'avertissements quant aux risques encourus, pointant la possibilité de pertes théoriquement illimitées, au moyen de caractères gras soulignés. L'absence de disproportion notable et injustifiée entre droits et obligations suffit à tenir en échec l'application de cette disposition - sans égard au fait que la clause litigieuse n'a "pas été mise en évidence d'[un]e quelconque manière".
Il s'ensuit le rejet du grief.
7.
7.1. Dans un ultime trait, le recourant dénonce une violation des art. 117 let. b et 312 al. 1 in fine CPC. Il déplore que sa requête d'assistance judiciaire ait été rejetée au motif qu'un examen sommaire de son appel permettait d'entrevoir d'emblée l'absence de chances de succès. Une telle analyse serait contredite par le délai pris pour statuer (quelque 6 mois) et par la longueur de l'arrêt sur appel (37 pages), qui traiterait les griefs "de manière détaillée et recherchée".
7.2. Le recourant ne trouve en soi rien à redire au fait que la Cour d'appel n'a pas recueilli les déterminations de la partie adverse, en application de l'art. 312 al. 1 in fine CPC (sur l'intérêt à se prévaloir de cette disposition, cf. arrêt 4A_282/2019 du 4 novembre 2019 consid. 3, cité par le recourant). Il soutient tout au plus qu'un examen sommaire de la cause - également requis dans le cadre de l'art. 312 al. 1 CPC (ATF 143 III 153 consid. 4.6, cité dans le recours) - ne permettait pas d'entrevoir d'emblée l'issue infructueuse de l'appel; il dénonce à ce titre une violation de l'art. 117 CPC.
Le recourant ne critique pas non plus le fait que la décision sur la requête intervienne en même temps que la décision finale.
7.3. Le droit à l'assistance judiciaire présuppose notamment que la cause ne paraisse pas dépourvue de toute chance de succès (art. 117 let. b CPC).
Selon la jurisprudence, un procès est dénué de chances de succès lorsque les perspectives de le gagner sont notablement plus faibles que les risques de le perdre, de sorte qu'elles ne semblent guère sérieuses. En revanche, les conclusions n'apparaissent pas vouées à l'échec lorsque les chances de succès et les risques d'échec s'équilibrent à peu près, ou lorsque les premières ne sont que légèrement inférieures aux seconds. Est finalement déterminant le point de savoir si un plaideur raisonnable doté des ressources nécessaires renoncerait à engager un procès en raison des frais qu'il s'exposerait à devoir supporter (ATF 142 III 138 consid. 5.1; 138 III 217 consid. 2.2.4; 133 III 614 consid. 5).
Le critère des chances de succès doit faire l'objet d'un examen provisoire et sommaire, tenant compte des circonstances prévalant lors du dépôt de la requête (ATF 142 III 138 consid. 5.1 p. 140; 138 III 217 consid. 2.2.4; 133 III 614 consid. 5). Il est question d'un examen prima facie sans instruction approfondie (DENIS TAPPY, in Commentaire romand, Code de procédure civile, 2e éd. 2019, n° 34 ad art. 117 CPC).
7.4. En l'occurrence, l'autorité précédente disposait déjà d'un jugement de première instance et devait statuer sur les chances de succès de l'appel.
La cause revêtait certes des aspects bancaires techniques qui impliquaient de présenter, pour la bonne compréhension du litige, le fonctionnement du marché; devaient aussi être mentionnées les clauses du contrat-cadre et les rapports rendus au sujet des événements du 15 janvier 2015. Cela étant, le nombre de pages d'un jugement ne constitue pas à lui seul un critère décisif permettant de jauger la difficulté de la cause - d'autant moins que certaines instances cantonales sont enclines à présenter des états de fait ne se restreignant pas à la stricte constatation des faits pertinents pour l'issue de la cause. Le délai pris pour statuer ne constitue pas davantage un indicateur impérieux, compte tenu de la surcharge des tribunaux.
En l'occurrence, force est de constater qu'au-delà des explications techniques sur le fonctionnement du système et de la présentation des circonstances topiques, il ne se posait pas de difficultés factuelles et juridiques telles qu'il eût fallu désigner un avocat (le recourant limite d'ailleurs ses conclusions à la prise en charge des frais de deuxième instance). Une fois les faits présentés et le fonctionnement du système compris, les questions juridiques se révélaient relativement simples. Le seul élément délicat était la notion de consommateur au sens de l'art. 8 LCD; or, celle-ci était sans incidence pour l'issue de la cause.
Aussi peut-on admettre, en de telles circonstances, qu'un examen sommaire de l'appel permettait déjà d'entrevoir qu'il était sans issue.
Il s'ensuit le rejet de l'ultime grief.
8.
En définitive, le recours doit être rejeté aux frais de son auteur (art. 66 al. 1 LTF), qui versera des dépens à son adverse partie pour ses frais d'avocat (art. 68 al. 1 et 2 LTF).
Par ces motifs, le Tribunal fédéral prononce :
1.
Le recours est rejeté.
2.
Les frais judiciaires, arrêtés à 6'500 fr., sont mis à la charge du recourant.
3.
Le recourant versera à l'intimée une indemnité de 7'500 fr. à titre de dépens.
4.
Le présent arrêt est communiqué aux parties ainsi qu'au Tribunal cantonal du canton de Vaud.
Lausanne, le 28 octobre 2021
Au nom de la Ire Cour de droit civil
du Tribunal fédéral suisse
La Présidente : Hohl
La Greffière : Monti